【问题标题】:Auto startup false not working for DefaultMessageListenerContainer自动启动 false 不适用于 DefaultMessageListenerContainer
【发布时间】:2019-12-30 10:20:21
【问题描述】:

我正在使用 spring 集成来监听 ibm mq,我想以休眠模式部署我的应用程序并在需要的时间启动它。所以为此我使用了 DefaultMessageListenerContainer 的自动启动错误。但是,只要我启动我的应用程序,它就会开始从队列中读取。 队列已经存在,并且一些其他应用程序已经从该队列中读取。我不希望我的应用程序在部署后立即开始读取。

@Bean()
public DefaultMessageListenerContainer pagn2utcContainer() {
    DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
    container.setConnectionFactory(mqConnectionFactory);
    container.setMessageListener(sita2pagnRcvQueueListener());
    container.setDestinationName(jetstarFromArinc);
    container.setAutoStartup(false);
    return container;
}

@Bean()
public ChannelPublishingJmsMessageListener sita2pagnRcvQueueListener() {
    ChannelPublishingJmsMessageListener listener = new ChannelPublishingJmsMessageListener();
    listener.setRequestChannelName("arinc2pagnRcvChannel");
    return listener;
}

@Bean
public JmsMessageDrivenEndpoint sita2pagnInbound() {
    return new JmsMessageDrivenEndpoint(pagn2utcContainer(), sita2pagnRcvQueueListener());
}

@Bean
public MQQueueConnectionFactory wmqQueueConnectionFactory() throws JMSException {
    MQQueueConnectionFactory mqQueueConnectionFactory = new MQQueueConnectionFactory();
    mqQueueConnectionFactory.setHostName(host);
    mqQueueConnectionFactory.setChannel(channel);
    mqQueueConnectionFactory.setPort(Integer.parseInt(port));
    mqQueueConnectionFactory.setQueueManager(queueManager);
    mqQueueConnectionFactory.setTransportType(1);
    return mqQueueConnectionFactory;
}

@ServiceActivator(inputChannel = "arinc2pagnRcvChannel", outputChannel = "nullChannel")
public Message<String> arinc2pagnRcv(Message<String> message) {
    return message;
}

【问题讨论】:

    标签: java jms spring-integration ibm-mq


    【解决方案1】:

    容器的生命周期由端点管理。您还需要在JmsMessageDrivenEndpoint 上将autoStartup 设置为false

    【讨论】:

    • 感谢 Gary,但我无法启动监听器。使用下面的代码来启动它。 public void start() { sita2pagnInbound().start(); pagn2utcContainer().start(); }
    • 不需要启动容器;启动端点将启动容器。见here
    • 即使只有 sita2pagnInbound().start();我没有看到队列的任何消费者。
    • 毫无意义。尝试 DEBUG 日志记录和/或调试器。
    • 嗨,Gary,在 dubug 模式下,它显示 Endpoint 已启动,但仍然没有使用者 { "message" : "tcp://localhost/127.0.0.1:61616@57658 协商后:OpenWireFormat{ version=12,cacheEnabled=true,stackTraceEnabled=true,tightEncodingEnabled=true,sizePrefixDisabled=false,maxFrameSize=104857600}" } { "message" : "已建立共享 JMS 连接" } { "message" : "开始 org.springframework.integration .jms.JmsMessageDrivenEndpoint@5a88594a" }
    猜你喜欢
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多