我正在嘗試編寫一個(gè)基本的 ActiveMQ 客戶端來收聽一個(gè)主題。我正在使用 Spring Boot ActiveMQ。我有一個(gè)基于使用 DefaultJmsListenerContainerFactory 的各種教程構(gòu)建的實(shí)現(xiàn),但我在使其正常工作時(shí)遇到了一些問題。@Configuration@EnableJmspublic class JmsConfig { @Bean public DefaultJmsListenerContainerFactory jmsContainerFactory(ConnectionFactory connectionFactory, DefaultJmsListenerContainerFactoryConfigurer configurer) { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); factory.setConcurrency("3-10"); factory.setConnectionFactory(connectionFactory); configurer.configure(factory, connectionFactory); factory.setSubscriptionDurable(true); factory.setClientId("someUniqueClientId"); return factory; }}@JmsListener(destination="someTopic", containerFactory="jmsContainerFactory", subscription="someUniqueSubscription")public void onMessage(String msg) { ...}一切正常,直到我嘗試進(jìn)行持久訂閱。當(dāng)我這樣做時(shí),我發(fā)現(xiàn)在容器工廠上設(shè)置了客戶端 ID 時(shí),我收到有關(guān)無法在共享連接上設(shè)置客戶端 ID 的錯(cuò)誤。Cause: setClientID call not supported on proxy for shared Connection. Set the 'clientId' property on the SingleConnectionFactory instead.當(dāng)我更改代碼以在連接工廠上設(shè)置客戶端 ID(它是一個(gè)包裝 ActiveMQConnectionFactory 的 CachingConnectionFactory)時(shí),服務(wù)成功啟動(dòng),讀取幾條消息,然后開始持續(xù)輸出此錯(cuò)誤:Setup of JMS message listener invoker failed for destination 'someTopic' - trying to recover. Cause: Durable consumer is in use for client: someUniqueClientId and subscriptionName: someUniqueSubscription我繼續(xù)收到消息,但這個(gè)錯(cuò)誤也混雜在日志中。這似乎是一個(gè)問題,但我真的不清楚如何解決它。我確實(shí)有一個(gè)沒有任何 spring 代碼的天真實(shí)現(xiàn),直接使用 ActiveMQConnectionFactory 并且似乎很高興使用持久消費(fèi)者(但它有自己的不同問題)。無論如何,我不認(rèn)為這是缺乏對(duì)另一端持久連接的支持。我希望在這方面有更多經(jīng)驗(yàn)的人可以幫助我弄清楚這個(gè)錯(cuò)誤是否是我可以忽略的,或者我需要做些什么來解決它。
1 回答

慕田峪4524236
TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
JMS 1.1(這是您使用的,因?yàn)槟褂玫氖?ActiveMQ 5.x)不支持共享持久訂閱。因此,當(dāng)您使用setConcurrency("3-10")
并且 Spring 嘗試創(chuàng)建 > 1 個(gè)訂閱時(shí),您會(huì)收到一個(gè)錯(cuò)誤。我看到解決這個(gè)問題的兩種主要方法:
使用
setConcurrency("1")
它將訂閱者/消費(fèi)者的數(shù)量限制為 1。根據(jù)您的要求,這可能會(huì)對(duì)性能產(chǎn)生嚴(yán)重的負(fù)面影響。切換到支持JMS 2.0的ActiveMQ Artemis并調(diào)用.
setSubscriptionShared(true)
添加回答
舉報(bào)
0/150
提交
取消