如何配置 Spring XD JMS 源以使用 DefaultMessageListenerContainer?

How to configure Spring XD JMS source to use DefaultMessageListenerContainer?

要使 JMS 主题订阅持久化,看来我需要确保

  1. DefaultMessageListenerContainer(而不是默认的 使用 SimpleMessageListenerContainer)
  2. 流定义包含 "durableSubscription=true acknowledge=transacted subscriptionName=xxxx pubSub=true"

我设法通过在 xd-singlenode.bat 中指定 spring.profiles.active 来启用 'dmlc',但是有没有更好的方法,例如使用属性或 yml?

xd-singlenode.bat

set SPRING_XD_OPTS=-Dspring.profiles.active=singlenode,dmlc -Dspring.application.name=singlenode -Dlogging.config=%XD_CONFIG_LOCATION%/xd-singlenode-logback.groovy -Dxd.home=%XD_HOME%

根据JmsSourceModuleOptionsMetadata源代码我们有:

public String[] profilesToActivate() {
    if ("transacted".equals(this.acknowledge)) {
        return new String[] { "dmlc" };
    }
    else {
        return new String[] { "smlc" };
    }
}

所以,看起来你的 acknowledge=transacted 足以继续

container-class="org.springframework.jms.listener.DefaultMessageListenerContainer"

在 JMS 源中。