2013-05-30 26 views
0

我有ActiveMQ代理(5.6.0)和spring-JMS生產者。我正在使用JMS隊列,而不是主題。它的偉大工程,但在JMS生產者有很多消息發送,我有時會得到:RequestTimedOutIOException

'org.springframework.jms.UncategorizedJmsException: Uncategorized 
exception occured during JMS processing; nested exception is 
javax.jms.JMSException: 
org.apache.activemq.transport.RequestTimedOutIOException' 

儘管所有的消息實際上被髮送給代理。

+0

你能發佈你的生產者代碼嗎? – brainOverflow

+0

你的發送超時是什麼?您的訂閱者在線還是離線持久? – brainOverflow

+0

我沒有配置超時。我使用spring將jms-listener定義爲生產者(在spring-context.xml中),並且彈出JMSTemplate(生產者內部)將消息發送到隊列。 –

回答

1

使用配置了Java EE容器中的純連接工廠的JMSTemplate發送大量消息從來就不是一個好主意。它激發了大量的網絡連接,爲每條消息建立新的會話等。

從ActiveMQ讀取JMSTemplate Gotchas爲一些背景和幫助解決問題。

僅配置PooledConnectionFactory和CachingConnectionFactory可能會解決您的問題。

這就是說,我不知道它是否會解決你的RequestTimedOutIOException,但它是一個很好的開始。

+0

Thanx。我正在使用'CachingConnectionFactory'。我更改爲'PooledConnectionFactory',但仍然發生異常(但消息實際上正在發送)。有線的事情是,這個異常沒有任何作用,這意味着:所有的消息**總是**被成功發送給代理,即使在JMS客戶端引發了'RequestTimedOutIOException'。 –

+0

這可能是一些重試機制在罩下的任何地方使它無論如何工作。無論如何,這是一個不好的跡象。 –

0

我有同樣的錯誤。在我的情況下,我只需要將connectionFactory的sendTimeout參數值從2000增加到5000或更高。