Spring integration 如何处理消息驱动通道适配器上的空目标

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}"

我需要Spring集成配置来处理应用程序接收消息的队列数量可变的情况

已尝试以下配置:

<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