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

具有spring集成的双向消息传递

阮炯
2023-03-14

我对Spring集成相对较新,但我的任务是实现一个tcp网关,该网关需要:

  • 在套接字上侦听消息

在我的Spring集成经验中,消息流不是双向的。我只将路由器配置为侦听、处理消息和输出到队列/主题。但是,在这种情况下,我需要接受消息并返回响应,同时将某些消息转发到队列。建议?

这是到目前为止我的集成xml。

<int:chain input-channel="tcpChannel">
    <int:service-activator ref="tcpHandler" method="handleInput" />
</int:chain>

<int-ip:tcp-inbound-gateway 
             id="tcpGateway"
             connection-factory="tcpServer" 
             request-channel="tcpChannel" />

如何将handleInput的输出转发到队列,同时从网关返回一些响应?

编辑:在与Gary进行以下对话后,这似乎是我们想要遵循的模式:

<int-ip:tcp-inbound-gateway id="tcpGateway"
                            connection-factory="tcpServer"
                            request-channel="tcpChannel"
                            reply-channel="tcpReplyChannel"/>

<int:publish-subscribe-channel id="tcpChannel" />

<int:chain input-channel="tcpChannel">
    <!-- int:json-to-object-transformer type="com.heb.revo.events.RxPosCredit" /-->
    <int:service-activator ref="tcpHandler" method="handleInputToQueue" />
    <jms:outbound-channel-adapter destination-name="${queue.response}" />
</int:chain>

<int:service-activator id="tcpResponseHandler"
                       ref="tcpHandler" method="replyToSocket"
                       input-channel="tcpChannel"
                       output-channel="tcpReplyChannel" />

<int:publish-subscribe-channel id="tcpReplyChannel" />

共有1个答案

通学真
2023-03-14

由于链没有输出通道,框架将把handleInput方法的返回值自动路由回网关。

如果要捕获结果并将其发送到其他地方(以及回复),请创建一个<代码>

 类似资料:
  • 我很好奇节俭是否适合我的用例?我正在制作另一个消息传递系统,其中有一个客户端和服务器,但客户端和服务器都会向另一个发送请求消息,并且并非所有消息都是请求,只是通知。 回到10年前,我用基于二进制的手卷编解码器做到了这一点。回到5年前,我使用Google协议缓冲区再次做到了这一点。但我现在听到了更多关于Thrift的信息。 Thrift可以简单地用作编解码器吗,还是它真的是围绕请求/回复模式构建的?

  • 我有一个集成应用程序,大部分工作,但注意到昨天一个消息丢失了。当时,service-activatorendpoint正忙于处理先前的消息。 以下是适用于该问题的配置。

  • 我需要调整返回到集成流调用方的所有错误消息,以便不泄漏信息,无论它们是作为异常抛出还是作为异步错误处理。我希望避免在每个消息处理程序上定义自定义错误通道。我尝试将转换器连接到默认错误通道,但未成功: 是否有一个中心点可以转换所有传出的错误消息?

  • 我正在玩MP Reactive Messaging和MP Opentracing,但我不知道如何跟踪通过Reactive Messaging发送的消息。 甚至有可能跟踪带有@income/@output注释的方法吗?

  • 我需要在我的Spring集成上下文中动态地将消息分配给MessageChannel。当我知道我想要的MessageChannel的名称时,我可以通过从上下文中获取MessageChannel bean来做到这一点。 我需要做的是通过编程查找在ChannelAdapter/服务中设置的消息通道的名称/id。 但是,MessageChannel API没有与之关联的getName()或getId()方

  • 我正在开发一个Spring应用程序,它每分钟将接收大约500条xml消息。下面的xml配置只允许每分钟处理大约60条消息,其余消息存储在队列中(持久化在DB中),并以每分钟60条消息的速率检索。 尝试从多个来源阅读文档,但仍然不清楚轮询器和任务执行器的角色。我对当前每分钟处理60条消息的理解是因为轮询器配置中的“固定延迟”值设置为10(因此它将在1分钟内轮询6次),“每轮询最大消息数”设置为10,