Geo*_*ins 5 java spring jms spring-jms
我可以将多种类型的实例写入给定的目的地,例如:
JmsTemplate template = ...
Alpha alpha = new Alpha(...);
Beta beta = new Beta(...);
template.convertAndSend("my-destination", alpha);
template.convertAndSend("my-destination", beta);
Run Code Online (Sandbox Code Playgroud)
我以为我可以提供多种带@JmsListener注释的方法来接收不同的消息有效负载,如下所示:
@JmsListener(destination = "my-destination")
public void receiveAlpha(Alpha alpha) { ... }
@JmsListener(destination = "my-destination")
public void receiveBeta(Beta beta) { ... }
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试这种方法PayloadArgumentResolver.resolveArgument,则会出现异常,因为它无法区分Beta应将值发送到一种方法,而将Alpha值发送到另一种方法。
我应该如何处理呢?当我将有效负载类型编码为消息属性时,我可以指定一个选择器来使事情像这样工作:
@JmsListener(destination = "my-destination", selector = "_type = 'Alpha'")
public void receiveAlpha(Alpha alpha) { ... }
@JmsListener(destination = "my-destination", selector = "_type = 'Beta'")
public void receiveBeta(Beta beta) { ... }
Run Code Online (Sandbox Code Playgroud)
但是当Spring在幕后做各种聪明事时,我很惊讶我必须像这样明确地帮助它。
有没有更含蓄/更好的方式来做到这一点?
| 归档时间: |
|
| 查看次数: |
1887 次 |
| 最近记录: |