首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态SendTo注解

动态SendTo注解
EN

Stack Overflow用户
提问于 2016-02-24 01:04:24
回答 2查看 1.9K关注 0票数 0

我有如下Java代码,用于从一个队列接收消息,处理它,并将处理后的消息写入另一个队列。

代码语言:javascript
复制
    @RabbitListener(queues = "rawFusion")
    @SendTo("Fusion")
    public String receiverFusion(Object _message) {
        String message = getMessage(_message);
        return messageParser.parse(message);
    }

在这里,我总是从"rawFusion“队列中获取消息,并将其写入"Fusion”队列。

我想要做的事情是,根据某些条件将消息写入不同的队列。所以我想在收到来自"RawFusion“队列的消息后决定@SendTo参数(或者可能不使用@SendTo)。

你知道怎么做吗?

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2016-02-24 01:39:33

如果发送方设置了replyTo消息属性(队列名称或exchange/routkingKey),则容器将使用该属性。仅当消息中没有replyTo时才使用@SendTo

如果你不能改变发送者,当使用@RabbitListener时,@SendTo可以包含一个SpEL表达式,但是它没有来自请求的任何上下文,我怀疑你需要它来智能地路由回复。

您可以将某些内容存储在ThreadLocal中,并使用

代码语言:javascript
复制
@SendTo("#{someBean.someMethod()}")

去找回它。

我将打开一个JIRA问题,看看我们是否可以提出一种机制,为评估提供一些上下文(例如,输入参数)。

编辑

Starting with version 1.6, the @SendTo can be a SpEL expression that is evaluated at runtime against the request and reply@SendTo("!{'some.reply.queue.with.' + result.queueName}")

票数 1
EN

Stack Overflow用户

发布于 2016-02-24 07:42:54

不幸的是,我不能对发送者的消息进行任何更改,在这种情况下,SpEL表达式似乎不能解决我的问题。但我找到了一种解决方法。我不确定这是否是一个好的做法,但它现在解决了我的问题。

我使用的是@SendTo("exchange/"),我没有使用任何路由密钥。在我的消息中,我设置了一个类似"destination=testQueue“的头,并创建了一个头交换,它根据目标值来路由我的消息。

谢谢你的回答,我希望我们能有一种机制,我们可以在收到消息后确定@SendTo的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35583708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档