Spring Integration TCP请求响应场景下如何将请求路由到不同channel?
你可以直接使用Spring Integration内置的**PayloadTypeRouter(负载类型路由器)**实现按消息payload的类类型分发到不同通道,不需要额外开发自定义路由逻辑,配置方式如下:
配置步骤
将你原有配置中<!-- 如何将请求切换到不同的channel? -->的位置,替换为以下路由配置即可:
<!-- 按消息payload的类类型路由到对应通道 --> <int:payload-type-router input-channel="inputChannel"> <!-- 替换type属性为你业务中实际对应类的全限定名 --> <int:mapping type="com.my.demo.DemoObjectOne" channel="myChannelOne"/> <int:mapping type="com.my.demo.DemoObjectTwo" channel="myChannelTwo"/> <!-- 可选配置:匹配不到对应类型时的默认路由通道,避免消息丢失 --> <int:default-output-channel ref="defaultHandleChannel"/> </int:payload-type-router>
补充说明
- 路由器会自动识别消息payload的实际类类型,优先匹配最精确的类(支持父类、接口的继承匹配),匹配到对应的通道后会自动向下传递消息,完全适配你现有后续的service activator处理流程。
- 如果你有更复杂的路由规则(比如除类型外还要判断消息头、参数等条件),也可以自定义路由实现,示例如下:
- XML配置自定义路由器
<int:router input-channel="inputChannel" ref="customRouteService" method="getRouteChannel"/>- 自定义路由实现类
@Component public class CustomRouteService { // 方法返回值为要路由到的通道名称 public String getRouteChannel(Message<Object> message) { Object payload = message.getPayload(); if (payload instanceof DemoObjectOne) { // 额外自定义判断逻辑 return "myChannelOne"; } else if (payload instanceof DemoObjectTwo) { return "myChannelTwo"; } return "defaultHandleChannel"; } }
内容的提问来源于stack exchange,提问作者xjava
相关产品推荐
相关产品推荐

