0
我正在編寫一個Spring引導應用程序,它將監聽一個或多個JMS主題。我們爲我們的JMS實現選擇了ActiveMQ。哪個提供了更好的性能:帶有switch語句或單個主題的單個JMS主題?
我們主要關注的是性能和可擴展性。我們預計可能會有數千條消息每秒到達。我們提出了兩種備選方案:
使用單個主題和單個@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); }
使用多個主題和多個@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偵聽器之間高效分配。
此外,任何意見的容器工廠配置表示讚賞。