gpt4 book ai didi

java - 将@JmsListener 与多个负载类型一起用于同一目的地?

转载 作者:搜寻专家 更新时间:2023-11-01 02:37:48 24 4
gpt4 key购买 nike

我可以将多种类型的实例写入给定的目的地,例如:

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 在幕后做了各种聪明的事情,我很惊讶我必须像这样明确地帮助它。

是否有更隐式/更好的方法来做到这一点?

最佳答案

JmsListener 不支持方法路由 - 每个带注释的方法都有自己的监听器容器。

唯一的替代方法是使用 ...(Object object) 并让自己沮丧。

关于java - 将@JmsListener 与多个负载类型一起用于同一目的地?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42656519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com