gpt4 book ai didi

java - Spring Integration DSL JMS 入站/出站网关

转载 作者:行者123 更新时间:2023-11-30 10:50:26 25 4
gpt4 key购买 nike

我正在尝试配置 spring-integration 以将消息发送到队列然后接收它,即一些非常简单的事情:

myApp -> outbound message -> jmsQueue -> inbound message -> myApp

我认为解耦所必需的是在流程的两端都有一个消息网关。因此,我的第一次尝试(有效)如下所示:

@MessagingGateway(name = "outboundGateway")
public interface OutboundGateway {


@Gateway(requestChannel = OUTBOUND_CHANNEL)
void sentMyObject(final MyObject myObject);
}


@Bean
public IntegrationFlow outboundFlow() {
return IntegrationFlows
.from(outboundChannel())
.handle(Jms.outboundAdapter(connectionFactory).destination(myQueue))
.get();
}

@Bean
public IntegrationFlow inboundFlow() {
return IntegrationFlows.from(Jms.messageDriverChannelAdapter(connectionFactory).destination(myQueue))
.channel(inboundChannel())
.handle(messageReceiverHandler())
.get();
}

其中 messageReceiverHandler() 是一个扩展 AbstractMessageHandler 的 bean。

所以上面我们有一个用于出站消息的消息网关。我的假设是我们也应该为入站消息设置一个,这样我们就可以将传入消息处理与应用程序代码分离。相反,我们只是有一个扩展 AbstractMessageHandler 的 bean,而我希望有一些网关配置。正确的用法是什么?

非常感谢。

最佳答案

首先,您通常需要使用 Jms.outboundGateway() 进行请求/回复消息传递,而不是两个单独的流;您可以让它与适配器一起工作,但它需要更多的工作,并且在这种情况下,不会提供任何好处。

您可以使用:

...
.from(outboundChannel())
.handle(Jms.outboundGateway(...))
.handle("myPojo", "someMethod")
.get();

其中 myPojo 是一个包含应用程序代码的 bean,其方法采用网关返回的类型。来自网关的回复转到流程中的下一个元素。

一般不建议继承框架类,除非有特殊需求。

编辑

但是,这需要远程系统使用 JmsReplyTo header 进行回复。此外,您的第二个处理程序的回复将转到网关(不应有无效回复)。

对于完全异步请求/回复,您的配置是正确的,但您可以在 .handle() 中使用 POJO。

关于java - Spring Integration DSL JMS 入站/出站网关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35081509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com