我能写多种类型的实例给定的目的地,如:将@JmsListener与多个有效内容类型用于相同的目的地?
JmsTemplate template = ...
Alpha alpha = new Alpha(...);
Beta beta = new Beta(...);
template.convertAndSend("my-destination", alpha);
template.convertAndSend("my-destination", beta);
我当时认为我能够提供多种@JmsListener
注解的方法接收不同的消息负载 - 像这样:
@JmsListener(destination = "my-destination")
public void receiveAlpha(Alpha alpha) { ... }
@JmsListener(destination = "my-destination")
public void receiveBeta(Beta beta) { ... }
但如果我试试这个,我得到的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) { ... }
但随着春天做各种聪明的幕后我很惊讶我已经帮它显然是这样的。
有没有更隐含/更好的方法来做到这一点?