亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何修復 ActiveMQ 持久訂閱拋出“持久消費者已在使用”錯誤

如何修復 ActiveMQ 持久訂閱拋出“持久消費者已在使用”錯誤

慕容3067478 2023-04-26 10:37:07
我正在嘗試編寫一個基本的 ActiveMQ 客戶端來收聽一個主題。我正在使用 Spring Boot ActiveMQ。我有一個基于使用 DefaultJmsListenerContainerFactory 的各種教程構建的實現,但我在使其正常工作時遇到了一些問題。@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) {    ...}一切正常,直到我嘗試進行持久訂閱。當我這樣做時,我發現在容器工廠上設置了客戶端 ID 時,我收到有關無法在共享連接上設置客戶端 ID 的錯誤。Cause: setClientID call not supported on proxy for shared Connection. Set the 'clientId' property on the SingleConnectionFactory instead.當我更改代碼以在連接工廠上設置客戶端 ID(它是一個包裝 ActiveMQConnectionFactory 的 CachingConnectionFactory)時,服務成功啟動,讀取幾條消息,然后開始持續輸出此錯誤: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我繼續收到消息,但這個錯誤也混雜在日志中。這似乎是一個問題,但我真的不清楚如何解決它。我確實有一個沒有任何 spring 代碼的天真實現,直接使用 ActiveMQConnectionFactory 并且似乎很高興使用持久消費者(但它有自己的不同問題)。無論如何,我不認為這是缺乏對另一端持久連接的支持。我希望在這方面有更多經驗的人可以幫助我弄清楚這個錯誤是否是我可以忽略的,或者我需要做些什么來解決它。
查看完整描述

1 回答

?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

JMS 1.1(這是您使用的,因為您使用的是 ActiveMQ 5.x)不支持共享持久訂閱。因此,當您使用setConcurrency("3-10")并且 Spring 嘗試創建 > 1 個訂閱時,您會收到一個錯誤。我看到解決這個問題的兩種主要方法:

  1. 使用setConcurrency("1")它將訂閱者/消費者的數量限制為 1。根據您的要求,這可能會對性能產生嚴重的負面影響。

  2. 切換到支持JMS 2.0的ActiveMQ Artemis并調用.setSubscriptionShared(true)


查看完整回答
反對 回復 2023-04-26
  • 1 回答
  • 0 關注
  • 291 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號