使用 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