【发布时间】:2017-07-28 03:30:55
【问题描述】:
我可以将多种类型的实例写入给定的目的地,例如:
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) { ... }
但由于 Spring 在幕后做了各种聪明的事,我很惊讶我必须像这样明确地帮助它。
有没有更隐含/更好的方法来做到这一点?
【问题讨论】:
标签: java spring jms spring-jms