我正在尝试使用JmsSendingMessageHandler发送消息,但找不到一个方法,可以从报头中获取目标值,比如messageHandler.setDestinationExpressionString("headers['destination_name']")?
@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<?>传递的报头中动态获取目的地
发布于 2021-11-11 15:51:20
没有像JmsSendingMessageHandler.setDestinationExpressionString()这样的应用程序接口。我不确定为什么你的IDE没有提示你走错了路,但还有其他选择。我的例子显示了这个:

如果您确实确定要将destination_name设置为上游,那么您确实可以使用setDestinationExpression(Expression) API,如下所示:
handler.setDestinationExpression(new SpelExpressionParser().parseExpression("headers['destination_name']"));另一种更多的Java-way是这样的:
handler.setDestinationExpression(new FunctionExpression<Message<?>>(m -> m.getHeaders().get("destination_name")));我认为无论如何我们都可以添加这个setDestinationExpressionString(),如果您坚持,并且可以为框架做出贡献的话:https://github.com/spring-projects/spring-integration/blob/main/CONTRIBUTING.adoc
https://stackoverflow.com/questions/69929364
复制相似问题