【问题标题】:Spring JMS: Why CachingConnectionFactory is created always with started=false?Spring JMS:为什么总是使用started=false创建CachingConnectionFactory?
【发布时间】:2016-09-18 20:10:12
【问题描述】:

我有一个示例应用演示:

  • Spring 框架4.2.5
  • ActiveMQ 5.13.3

我有以下几点:

@Bean(name="connectionFactory")
public CachingConnectionFactory cachingConnectionFactory(ActiveMQConnectionFactory selectedActiveMQConnectionFactory) throws JMSException{
    CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
    cachingConnectionFactory.setClientId("ManolitoActiveMQ");
    cachingConnectionFactory.setTargetConnectionFactory(selectedActiveMQConnectionFactory);
    cachingConnectionFactory.setSessionCacheSize(10);
    cachingConnectionFactory.createConnection().start();
    return cachingConnectionFactory;
}

当我使用cachingConnectionFactory.createConnection().start(); 行时 我可以看到,当我的应用启动时,它会显示:

3370 [main] INFO o.s.j.c.CachingConnectionFactory - 已建立共享 JMS 连接: ActiveMQConnection {id=ID:sometext,clientId=ManolitoActiveMQ,started=false}

当应用程序启动并阅读Established shared JMS Connection 时,是否有预期该消息,但为什么显示started=false?我觉得应该是真的。

如果我评论cachingConnectionFactory.createConnection().start();并启动应用程序,上面显示的消息不会出现,好的,这是预期的。但是后来通过JMX开始发消息,又可以看到了

3370 [main] INFO o.s.j.c.CachingConnectionFactory - 已建立共享 JMS 连接: ActiveMQConnection {id=ID:sometext,clientId=ManolitoActiveMQ,started=false}

好的,但是started=false又出现了

这在某些方面令人困惑,因为cachingConnectionFactory.createConnection().start() 行以start() 结束连接

  1. 为什么实际上总是出现started=false
  2. started 属性何时或如何与true 一起出现?

【问题讨论】:

    标签: spring activemq jmx spring-jmx


    【解决方案1】:

    注意started=false在连接的toString()中——它与连接工厂无关;它与刚刚创建的连接有关。

    logger.info("Established shared JMS Connection: " + this.connection);
    

    如果需要,稍后将启动连接本身。

    【讨论】:

    • 感谢加里的回复,明白了。
    • 我已经从 initConnection() 方法的 SingleConnectionFactory.java 类中确认了该行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多