使用 JmsSendingMessageHandler 从 header 动态评估 Jms 目标
Evaluate Jms Destination Dynamically from header using JmsSendingMessageHandler
我正在尝试使用 JmsSendingMessageHandler
发送消息,但找不到可以从 header 中获取目标值的方法,例如 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;
}
有什么解决办法吗?我想从 header 动态获取目的地 我正在通过 Message<?>
没有API那样的JmsSendingMessageHandler.setDestinationExpressionString()
。不确定为什么您的 IDE 没有提示您走错了路,但还有其他选择。我的显示如下:
如果你真的确定你在上游设置了 destination_name
,那么你确实可以使用 setDestinationExpression(Expression)
API 并且像这样:
handler.setDestinationExpression(new SpelExpressionParser().parseExpression("headers['destination_name']"));
另一种更Java的方式是这样的:
handler.setDestinationExpression(new FunctionExpression<Message<?>>(m -> m.getHeaders().get("destination_name")));
我想我们可以添加 setDestinationExpressionString()
无论如何,如果你坚持并且可以将这样的修复回馈给框架:https://github.com/spring-projects/spring-integration/blob/main/CONTRIBUTING.adoc
我正在尝试使用 JmsSendingMessageHandler
发送消息,但找不到可以从 header 中获取目标值的方法,例如 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;
}
有什么解决办法吗?我想从 header 动态获取目的地 我正在通过 Message<?>
没有API那样的JmsSendingMessageHandler.setDestinationExpressionString()
。不确定为什么您的 IDE 没有提示您走错了路,但还有其他选择。我的显示如下:
如果你真的确定你在上游设置了 destination_name
,那么你确实可以使用 setDestinationExpression(Expression)
API 并且像这样:
handler.setDestinationExpression(new SpelExpressionParser().parseExpression("headers['destination_name']"));
另一种更Java的方式是这样的:
handler.setDestinationExpression(new FunctionExpression<Message<?>>(m -> m.getHeaders().get("destination_name")));
我想我们可以添加 setDestinationExpressionString()
无论如何,如果你坚持并且可以将这样的修复回馈给框架:https://github.com/spring-projects/spring-integration/blob/main/CONTRIBUTING.adoc