我能寫多種類型的實例給定的目的地,如:將@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) { ... }
但隨着春天做各種聰明的幕後我很驚訝我已經幫它顯然是這樣的。
有沒有更隱含/更好的方法來做到這一點?