首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在spring-integration中使用payload-type-router路由带有列表通用有效负载的消息

在spring-integration中使用payload-type-router路由带有列表通用有效负载的消息
EN

Stack Overflow用户
提问于 2021-10-14 05:52:06
回答 1查看 83关注 0票数 0

我尝试在遗留应用程序的基于xml的配置中使用payload-type-router,该应用程序既不会路由到特定的通道,也不会在该实例中抛出任何错误。我们是否可以使用使用XML配置的有效负载类型路由器来路由List类型的消息。我在文档中没有找到太多的例子,因为它只提到了使用Integer,String类的路由,而没有使用List。

代码语言:javascript
运行
复制
 <int:payload-type-router input-channel="run-router-channel">
        <int:mapping type="com.foo.req.BlRunnerRequest" channel="runner-channel"/>
        <int:mapping type="java.util.List" channel="run-channel"/>  <!-- can spring integration support this approach-->
 </int:payload-type-router> 

提前谢谢。在XML中,这种路由的替代方案是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-14 14:34:10

是。我们可以的。我刚刚将项目中的单元测试修改为:

代码语言:javascript
运行
复制
<payload-type-router id="router" input-channel="routingChannel">
    <mapping type="java.lang.String" channel="channel1" />
    <mapping type="java.lang.Integer" channel="channel2" />
    <mapping type="java.lang.Number[]" channel="channel3" />
    <mapping type="java.lang.Long[]" channel="channel4" />
    <mapping type="java.util.List" channel="channel5" />
</payload-type-router>

我在test方法中这样做:

代码语言:javascript
运行
复制
testService.foo(new GenericMessage<>(new ArrayList()));
PollableChannel channel5 = (PollableChannel) context.getBean("channel5");
assertThat(channel5.receive(100).getPayload()).isInstanceOf(List.class);

可能在您的情况下发生了其他事情,并且请求的有效负载实际上不是java.util.List

当路由器不能将消息传递到某个通道时,它也具有以下逻辑:

代码语言:javascript
运行
复制
    if (!sent) {
        getDefaultOutputChannel();
        if (this.defaultOutputChannel != null) {
            this.messagingTemplate.send(this.defaultOutputChannel, message);
        }
        else {
            throw new MessageDeliveryException(message, "No channel resolved by router '" + this
                    + "' and no 'defaultOutputChannel' defined.");
        }
    }

由于我在您的代码片段中没有看到defaultOutputChannel配置,这只意味着抛出了一个MessageDeliveryException。如果你在你的案例中看不到它,那么你会以某种方式吞下它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69565682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档