2016-09-23 39 views
0

我得到了這種情況,其中我試圖用SSL運行activemq,並且看到SSL異常。爲什麼activemq與自己打開套接字

這是從我的activemq.xml除了。

<transportConnectors> 
    <transportConnector name="openwire" uri="tcp://0.0.0.0:${JMS_PORT}" /> 
    <transportConnector name="stomp" uri="stomp://0.0.0.0:${JMS_STOMP_PORT}"/> 
    <transportConnector name="ssl" uri="ssl://0.0.0.0:${JMS_SSL_PORT}"/> 
</transportConnectors> 

<sslContext> 
    <sslContext 
     keyStore="file:${JMS_KEY_STORE}" 
     keyStorePassword="${JMS_KEY_STORE_PASSWORD}" 
     trustStore="file:${JMS_TRUST_STORE}" 
     trustStorePassword="${JMS_TRUST_STORE_PASSWORD}" 
    /> 
</sslContext> 

<networkConnectors> 
    <networkConnector 
     name="host1 and host2" 
     uri="static://(${JMS_X_SITE_CSV_URL})?wireFormat=ssl&amp;wireFormat.maxInactivityDuration=30000" 
     dynamicOnly="true" 
     suppressDuplicateQueueSubscriptions = "true" 
     networkTTL="1" 
    /> 
</networkConnectors> 

而變量的值如下。現在

JMS_PORT=10029 
JMS_STOMP_PORT=10030 
JMS_SSL_PORT=10031 
JMS_X_SITE_CSV_URL=tcp://localhost:10031/ 

,根據上述的結構,我看到錯誤的javax.net.ssl.SSLException如下:

2016-09-20 14:47:48,619 | ERROR | Could not accept connection from tcp://localhost:54869: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? | org.apache.activemq.broker.TransportConnector | ActiveMQ BrokerService[divinedragonbox] Task-3 
2016-09-20 14:47:49,628 | ERROR | Could not accept connection from tcp://localhost:54871: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? | org.apache.activemq.broker.TransportConnector | ActiveMQ BrokerService[divinedragonbox] Task-9 
2016-09-20 14:47:51,639 | ERROR | Could not accept connection from tcp://localhost:54893: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? | org.apache.activemq.broker.TransportConnector | ActiveMQ BrokerService[divinedragonbox] Task-12 
2016-09-20 14:47:55,645 | ERROR | Could not accept connection from tcp://localhost:54902: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? | org.apache.activemq.broker.TransportConnector | ActiveMQ BrokerService[divinedragonbox] Task-20 
2016-09-20 14:48:03,653 | ERROR | Could not accept connection from tcp://localhost:54906: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? | org.apache.activemq.broker.TransportConnector | ActiveMQ BrokerService[divinedragonbox] Task-31 
2016-09-20 14:48:19,661 | ERROR | Could not accept connection from tcp://localhost:54915: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? | org.apache.activemq.broker.TransportConnector | ActiveMQ BrokerService[divinedragonbox] Task-50 

錯誤消息看着神祕的在第一,但後來就很有意義。當我實際嘗試連接到SSL端口10031時,我配置了網絡連接器tcp://。此問題導致套接字保留在CLOSE_WAIT中,從而爲ActiveMQ本身使用了大量內存。

下面是這個問題的懸掛插座的樣子。

tcp6  0  0 127.0.0.1:54869  127.0.0.1:10031  CLOSE_WAIT 4807/java   
tcp6  0  0 127.0.0.1:54871  127.0.0.1:10031  CLOSE_WAIT 4807/java   
tcp6  1  0 127.0.0.1:54893  127.0.0.1:10031  CLOSE_WAIT 4807/java   
tcp6  0  0 127.0.0.1:54902  127.0.0.1:10031  CLOSE_WAIT 4807/java   
tcp6  1  0 127.0.0.1:54915  127.0.0.1:10031  CLOSE_WAIT 4807/java   
tcp6  1  0 127.0.0.1:54922  127.0.0.1:10031  CLOSE_WAIT 4807/java 

所以,我固定JMS_X_SITE_CSV_URLssl://localhost:10031/和問題就解決了。

現在,這是我的問題(對不起,關於這裏來的長解釋)。

爲什麼activemq自己打開套接字?

而在這個問題上工作了我就在想,該插座由生產者開/消費者嘗試讀取/寫入數據從隊列,但它是非常晚了,當我只運行的ActiveMQ過程(沒有其他的java進程)來隔離它正在與自己打開連接。

回答

0

由於配置塊 - networkConnector,ActiveMQ試圖連接到自己的代理。

爲您提供 通常要允許衆多券商一起連接成一個 網絡,以便爲你祝願所有邏輯 連接在一起,你可以有很多的客戶大消息傳送結構的大規模可擴展性 - 與運行根據您的客戶端數量和網絡拓撲結構,儘可能多的消息中間人需要 。

http://activemq.apache.org/networks-of-brokers.html

正如,我已經配置了JMS_X_SITE_CSV_URL爲localhost,ActiveMQ是試圖連接到自己的經紀人。

更多這方面的一個小細節,在 - WARNING as java.io.EOFException when ActiveMQ starts