首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JmsSendingMessageHandler从报头动态评估Jms目标

使用JmsSendingMessageHandler从报头动态评估Jms目标
EN

Stack Overflow用户
提问于 2021-11-11 13:47:01
回答 1查看 43关注 0票数 0

我正在尝试使用JmsSendingMessageHandler发送消息,但找不到一个方法,可以从报头中获取目标值,比如messageHandler.setDestinationExpressionString("headers['destination_name']")

代码语言:javascript
复制
@MessagingGateway
public interface OutboundMessageGateway {

    @Gateway(requestChannel = "outMessageChannel")
    void sendMessage(Message<?> message);

}

@Bean
@ServiceActivator(inputChannel = "outMessageChannel" )
private MessageHandler jmsOutboundHandler() {
        JmsSendingMessageHandler messageHandler = new JmsSendingMessageHandler(new JmsTemplate(connectionFactory());
        messageHandler.setDestinationExpressionString("headers['destination_name']"); // not available
        return messageHandler;
    }  

有什么解决方案吗?我想从Message<?>传递的报头中动态获取目的地

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-11 15:51:20

没有像JmsSendingMessageHandler.setDestinationExpressionString()这样的应用程序接口。我不确定为什么你的IDE没有提示你走错了路,但还有其他选择。我的例子显示了这个:

如果您确实确定要将destination_name设置为上游,那么您确实可以使用setDestinationExpression(Expression) API,如下所示:

代码语言:javascript
复制
handler.setDestinationExpression(new SpelExpressionParser().parseExpression("headers['destination_name']"));

另一种更多的Java-way是这样的:

代码语言:javascript
复制
handler.setDestinationExpression(new FunctionExpression<Message<?>>(m -> m.getHeaders().get("destination_name")));

我认为无论如何我们都可以添加这个setDestinationExpressionString(),如果您坚持,并且可以为框架做出贡献的话:https://github.com/spring-projects/spring-integration/blob/main/CONTRIBUTING.adoc

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

https://stackoverflow.com/questions/69929364

复制
相关文章

相似问题

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