当前位置: 首页 > 知识库问答 >
问题:

Spring集成DSL JMS入站/出站网关

充栋
2023-03-14

我正在尝试将spring集成配置为向队列发送消息,然后接收消息,即非常简单的事情:

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,而我期望一些网关配置。正确的用法是什么?

非常感谢。

共有1个答案

洪浩
2023-03-14

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

您可以使用:

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

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

除非有特殊要求,否则通常不建议从框架类继承。

编辑

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

对于完全异步的请求/应答,您的配置是正确的,但您可以在<代码>中使用POJO。handle()。

 类似资料:
  • 我有一个 FileUpload 事件,应该将其发送到 http:outbound upload URL。为此,我必须首先对登录 URL 进行身份验证并获取响应,并设置要执行的出站上传 URL 的会话 ID。在我的情况下,我有一个事件侦听器,它侦听应用程序以发布文件上传事件。发布后,我的侦听器可以拾取并执行流。我正在尝试了解如何实现这一点,因为文件上传对象需要保留,直到登录响应返回。谢谢!

  • 我尝试使用以下代码,得到了回应:状态:405方法不允许。这是我的Http请求:http://localhost:8090/services/test?name=test.代码或http请求有什么问题?

  • 我不熟悉Spring集成。我正在尝试使用http入站网关构建一个简单的应用程序。下面是我得到的运行时异常。 下面是代码文件。 波约 服务 } 服务激活器 } 存储库 请帮助我,我正在试图找到异常发生的原因,但无法解决。提前谢谢。 集成文件。

  • 我正在开发一个关于Spring集成的POC,使用如下。 从远程JMS队列订阅输入消息(A) 将输入消息(A)转换为(B) 使用(B)调用远程Web服务并接收响应 我的spring int-config-xml有以下内容 在我的Spring集成proj工作区中拥有所有jaxb生成的源代码。 在STS 3.8中执行此操作时。3,将抛出以下错误。 不确定我的代码中有什么错误。任何解决这一问题的帮助都是高

  • 我试图实现某种代理作为我的数据流的一部分,我想在我的入站网关上接收超文本传输协议请求,并通过出站网关传递它。我想保留所有查询字符串参数。我的网关配置是: 我预计它的工作如下: > GET/services/normalization q=cat 入站网关接收请求,并将其通过搜索请求通道发送到出站网关。 出站网关向外部服务发送整个请求: 获取/查询q=cat 但实际上,出站网关发送不包含任何查询参数

  • 问题内容: 入站和出站通道适配器之间的根本区别是什么? 任何示例都将非常有帮助。 我已经查看过Spring文档,这种“方向性”的区别对我来说还不清楚。我支持配置了outbound-channel-adapter的应用程序,但是我发现使用 出站 标签可以直观地了解行为计数器。该适配器获取一个外部文件,然后 将其 引入应用程序中, 在 该应用程序中我们解析文件并保留数据。 这类似于这个问题,但是我想更