Spring integration 如何处理消息驱动通道适配器上的空目标
我需要Spring集成配置来处理应用程序接收消息的队列数量可变的情况 已尝试以下配置:Spring integration 如何处理消息驱动通道适配器上的空目标,spring-integration,Spring Integration,我需要Spring集成配置来处理应用程序接收消息的队列数量可变的情况 已尝试以下配置: <int-jms:message-driven-channel-adapter id="dsToT2" destination-name="#{tConfigurer.getDsToTQueues().values().toArray().length>2? dsConfigurer.getDsToTQueues().values().toArray()[2]:null}"
<int-jms:message-driven-channel-adapter id="dsToT2"
destination-name="#{tConfigurer.getDsToTQueues().values().toArray().length>2?
dsConfigurer.getDsToTQueues().values().toArray()[2]:null}"
connection-factory="connectionFactory"
channel="ackToTChannel"/>
处理这种情况的最佳方法是什么?
谢谢所以,问题在于,在应用程序启动时,您会遇到
IllegalArgumentException
。
如果真的不知道您的定义是否为空,您应该执行一些Java代码:
自动启动=“false”
autoStartup=false
为DefaultMessageListenerContainer
引入单独的bean,并将其注入
destination name
是该DefaultMessageListenerContainer
的属性,您就应该在应用程序启动时更正一些代码以解析目的地,并将值(如果有)注入容器bean
的start()
。它是一个id为dsToT2的AbstractEndpoint
bean目的地名称
属性提供null
。当AC尝试填充bean属性时,它将在启动时失败。在本例中,将调用AbstractMessageListenerContainer#setDestinationName
,然后执行检查
Assert.notNull(destinationName,“'destinationName'不能为null”)代码>。
但是,您可以尝试提供空字符串'
而不是null
,并为自动启动
属性添加类似的SpEL条件
HTH对不起,我不明白你的立场。如果“destination name Resolved to null”,您想要什么?如果destination name为null,jms:message driven channel adapter应该是非活动的,并且忽略Dartem,谢谢,现在不在我的电脑上,但有两个问题:1)为什么需要DefaultMessageListenerContainer?不能简单地调用startup()吗在jms消息驱动通道适配器上?2) 您是否可以在jms适配器的自动启动中添加一些脚本,并根据目标是否为null,相应地返回true或false?
java.lang.IllegalArgumentException: 'destinationName' must not be null