我们有4个ActiveMQ代理(每个在独立服务器上运行)在代理网络中设置。有大约60个生产者。生产者使用JDNI从Glassfish中查找ActiveMQ连接工厂。ActiveMQ故障转移传输 - 为什么有这么多的连接?
的ActiveMQ的URI在Glassfish的配置如下:
failover:(tcp://phxgapm01:61616,tcp://phxgapm02:61616,tcp://phxgapm03:61616,tcp://phxgapm04:61616)?randomize=true&backup=false&maxReconnectAttempts=8
每个生产者过程将执行javax.jms.ConnectionFactory的JNDI查找,然后创建1个javax.jms.Connection。在生产者运行时,它会定期创建一个javax.jms.Session和javax.jms.MessageProducer,将一些消息发送到一个队列,然后关闭Session和MessageProducer。
这就是所有的背景 - 现在我的问题。从一些,但不是所有的生产商,我们将看到日志输出流类似如下:
2014-12-30 21:07:06,534 INFO FailoverTransport - Successfully connected to tcp://phxgapm03:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,538 INFO FailoverTransport - Successfully connected to tcp://phxgapm04:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,544 INFO FailoverTransport - Successfully connected to tcp://phxgapm02:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,548 INFO FailoverTransport - Successfully connected to tcp://phxgapm04:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,552 INFO FailoverTransport - Successfully connected to tcp://phxgapm01:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,556 INFO FailoverTransport - Successfully connected to tcp://phxgapm02:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,561 INFO FailoverTransport - Successfully connected to tcp://phxgapm02:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,565 INFO FailoverTransport - Successfully connected to tcp://phxgapm01:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,568 INFO FailoverTransport - Successfully connected to tcp://phxgapm02:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,572 INFO FailoverTransport - Successfully connected to tcp://phxgapm04:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,577 INFO FailoverTransport - Successfully connected to tcp://phxgapm03:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,581 INFO FailoverTransport - Successfully connected to tcp://phxgapm04:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,586 INFO FailoverTransport - Successfully connected to tcp://phxgapm01:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,590 INFO FailoverTransport - Successfully connected to tcp://phxgapm03:61616 - [ActiveMQ Task-1]
2014-12-30 21:07:06,594 INFO FailoverTransport - Successfully connected to tcp://phxgapm04:61616 - [ActiveMQ Task-1]
对于一些生产商,我们将看到以下输出,每10分钟 - 对于其他人少频繁。更令人困惑的是,所有这些生产者为JMS消息传递使用相同的代码 - 因此,虽然生产者在创建会话和消息生成器的频率方面可能会有所不同,但它们都使用相同的代码,并且都只创建一个连接对象。
从阅读文档,我的理解是故障转移传输将打开一个经纪人的连接(在我们的案例中随机选择)。为什么我们看到这种连接流(在60ms内与每个经纪人有多个连接)?使用netstat我们可以看到这些连接。这是正常的吗?如果不是,有什么建议可能会导致这种情况?
是否使用直接JMS或JMSTemplate等代码示例很有帮助。有没有使用PooledConnectionFactory? –
它是直的JMS - 没有使用PooledConnectionFactory(至少不是直接) – sceaj
如果有XA连接工厂,那么您需要使用PooledConnectionFactory,否则它将一直断开/重新连接。你可以看到连接数量增长的管理主题之一(不记得哪一个) – stringy05