spring - Spring集成收件人列表路由器问题
问题描述
我在我的应用程序中使用收件人列表路由器将消息发送到不同的 JMS 出站适配器,如下所示:
queue -> recipient-list-router -> queue1 -> JMS outbound adapter 1
-> queue2 -> JMS outbound adapter 2
我面临两个问题:
- 选择器表达式仅在最初运行,而不是针对转发的每条消息
- 如果任何 JMS 代理关闭,则消息不会发送到另一个 JMS 代理。
以下是 XML 配置:
<i:recipient-list-router input-channel="result-pack-output-channel" >
<i:recipient channel="result-pack-output-channel-1"
selector-expression="#{utils.isHourInInterval('LN')}"/>
<i:recipient channel="result-pack-output-channel-2"
selector-expression="#{utils.isHourInInterval('NY')}"/>
<i:recipient channel="result-pack-output-channel-3"
selector-expression="#{utils.isHourInInterval('HK')}" />
<i:recipient channel="result-pack-output-channel-4"
selector-expression="#{utils.isHourInInterval('ME')}"/>
</i:recipient-list-router>
解决方案
#{...}
在上下文初始化期间,表达式被评估一次。在这里,您需要运行时表达式。@
在运行时表达式中,您使用- 所以引用其他 bean ...
selector-expression="@utils.isHourInInterval('LN')"
编辑
我错过了你的第二个问题 - 使用ignore-send-failures="true">
。
推荐阅读
- r - R图线性拟合子集
- python-3.x - 迭代添加的最有效数据类型?
- javascript - 如何比较两个数字一是相同输入的输入值和属性值?
- mysql - MySql 查询速度慢 1000 倍,LIMIT 稍高(不是偏移量)
- android - BLE:如何在扫描结果之间准确找到我的设备?
- python - python中类实例化期间实例与对象之间的区别
- javascript - 通过 Symbol.iterator 的迭代不会发生
- powershell - 如何使用 powershell 5 创建具有 2 个密钥用法的证书
- database - 如何在不覆盖实时数据的情况下更新来自测试数据库的实时数据库中的列内的表
- php - Angular 5 Ionic 3 Laravel 项目结构