我們有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