[英]ESB/Message Queue quick start
我需要實現一個演示系統以證明概念。 基本上,系統描述可以簡化為2個模塊:
( 注意:這些模塊位於同一個Intranet中,因此我可能希望該協議比http更快。我想到了以下選項:
理想情況下,該系統將(但不僅限於)基於Java,可在Linux RH上運行並且能夠線性擴展,但是性能超出了POC的范圍。 我在看ServiceMix和ActiveMQ 。 我的想法是在Java這些模塊中實現。 該架構將是消息驅動的。 模塊將通過消息隊列或服務總線進行通信。
“消費者”將請求作為消息發送到消息隊列,“生產者”按特定的訂閱主題進行選擇,處理請求並將響應發回到同一隊列。 在“響應”主題上訂閱的“消費者”從隊列中選擇結果。 結束。
我的問題是:
帶有XML消息的ActiveMQ應該足夠了,除非您的消息很大且很多,在這種情況下,我會選擇protobuf(免責聲明:我在上一個項目中使用了它們)。
事實上,我可能會在ActiveMQ上進行一些amqp實現,例如Apache Qpid(免責聲明:也在不久前使用過)。 但這更多是個人原因。
protobuf的缺點是您需要了解一些有關它們的知識,網絡上遍布世界,但是一旦您嘗試面對“真正的問題”,這並不太容易。 您還需要一個maven插件來構建和編譯文件,除非您想手動執行。
ActiveMQ僅僅是JMS提供程序,我相信您已經看過以下示例:
在實現方面,當module1發送請求時,您要確保該響應將被同一模塊讀取。 我建議使用臨時隊列。 將請求發送到某個隊列(還發送臨時隊列名稱,例如預期響應將到達的臨時隊列名稱); module2處理該消息並將響應發送到臨時隊列,模塊1在其中使用消息偵聽器讀取該響應。
現在,您必須非常快地刪除此臨時隊列,以免堆積,還要檢查ActiveMQ是否為其提供了唯一的名稱。
在帶有簡單參數auto-delete = true的QPID中 ,當沒有活動的偵聽器時,刪除隊列時,我不知道如何在ActiveMQ中進行處理,但是應該有一種方法。
我的0.02美元
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.