2016-09-29 51 views
0

我正在編寫一個Spring引導應用程序,它將監聽一個或多個JMS主題。我們爲我們的JMS實現選擇了ActiveMQ。哪個提供了更好的性能:帶有switch語句或單個主題的單個JMS主題?

我們主要關注的是性能和可擴展性。我們預計可能會有數千條消息每秒到達。我們提出了兩種備選方案:

  1. 使用單個主題和單個@JmsListener方法。在偵聽器內部,檢查JMS屬性以確定處理郵件的正確策略。

    @JmsListener(destination = "response", containerFactory = "myTopicFactory") 
    public void onMessage(Message message) throws IOException { 
        message.getProperty("message.type") 
        JmsHandler handler = messageStrategyMap.get(messageType); 
        handler.handle(message); 
    } 
    
  2. 使用多個主題和多個@JmsListener方法。在這種情況下不需要開關邏輯。

    @JmsListener(destination = "responseType1", containerFactory = "myTopicFactory") 
    public void onMessage1(Message message) throws IOException { 
        // Handle message type 1 
    } 
    
    @JmsListener(destination = "responseType2", containerFactory = "myTopicFactory") 
    public void onMessage2(Message message) throws IOException { 
        // Handle message type 2 
    } 
    

的方式#的優點1,有沒有需要管理多個目的地的資源;只有一個目的地。這也意味着協作系統只需要知道一個主題。

方法#2的優點是不需要任何類型的開關邏輯。任何傳入主題A的消息都具有專門針對主題A格式化的有效內容。對此方法的擔憂是用於處理傳入消息的資源可能無法在不同的JMS偵聽器之間高效分配。

此外,任何意見的容器工廠配置表示讚賞。

回答

1

這取決於消息的大小和容量。有了多個監聽器,你也可以獲得多個線程,這樣可以運行得更快,直到有很多話題(因此線程)丟失。我建議在你的代表系統上設置一個快速測試和基準測試,並且你將會拿着公司數字來進行比較。

相關問題