簡體   English   中英

如何將 Springboot 應用程序連接到 Azure SB,具有跨不同主題的多個訂閱(同名)

[英]How to connect a Springboot app to an Azure SB with multiple subscriptions (with same name) across different topics

我在使用 JMSListeners 連接到 Azure 服務總線的 Springboot 應用程序中有一個 Controller。

Method 1:

@JmsListener(destination = "${topicX}", containerFactory = "topicJmsListenerContainerFactory",
            subscription = "${XXX}")

Method 2:

@JmsListener(destination = "${topicY}", containerFactory = "topicJmsListenerContainerFactory",
        subscription = "${XXX}")

如您所見,主題名稱不同,但訂閱名稱相同。

Springboot 應用程序啟動時出現錯誤。

這是錯誤:

原因:javax.jms.JMSRuntimeException:非共享持久訂閱已處於活動狀態,名稱為“XXX”。

我是 Azure SB 和主題的新手,所以我不確定這是否可以做到? 或者不同主題下的多個訂閱不應該被命名為相同的?

這是我繼承的一些代碼,用於調試並找出可能的解決方案,所以我沒有太多關於為什么這樣做的細節。 如果您需要更多信息,我很樂意與您分享。

請幫忙!

我嘗試通過注釋掉其中一種方法並確認它有效。

我想了解是否有辦法在沒有錯誤的情況下運行這兩種方法。

  • 據我所知,每個訂閱在服務總線命名空間中都是不同的。

  • 在這里,我試圖在不同的主題中創建一個新的訂閱,而名為Subscription的訂閱已經存在於其他一些主題中,門戶網站給了我以下錯誤

在此處輸入圖像描述

  • 所以我獲取消息的唯一方法是使用以下代碼進行不同的訂閱:
@Component  
public class TopicReceiveController {  
    private static final String TOPIC_NAME1 = "test";  
 private static final String TOPIC_NAME2 = "newtest";  
 private static final String SUBSCRIPTION_NAME1 = "Subscription";  
 private static final String SUBSCRIPTION_NAME2 = "Subscription2";  
  
 private final Logger logger = LoggerFactory.getLogger(TopicReceiveController.class);  
  
  @JmsListener(destination = TOPIC_NAME1, containerFactory = "topicJmsListenerContainerFactory",  
  subscription = SUBSCRIPTION_NAME1)  
    public void receiveMessage(String Name) {  
        logger.info("Received message: {}", Name);  
  }  
  
    @JmsListener(destination = TOPIC_NAME2, containerFactory = "topicJmsListenerContainerFactory",  
  subscription = SUBSCRIPTION_NAME2)  
    public void receiveMessageNewTopic(String Name) {  
        logger.info("Received message: {}", Name);  
  }  
}

Output:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM