簡體   English   中英

有人可以解釋一下消息代理的用途嗎?

[英]Can someone explain what message brokers are used for?

在我的工作中,如果沒有人贊揚MQ系列或MSMQ之類的優點,很難走5分鍾,而且我一直想知道,在流行語閃閃發光之后,這些出色設備的實際例子是什么?真實世界。

我正在尋找的東西可能會激發我找到其中一種的用途,或者給我某種度量標准,我可以用它來評估消息總線/消息代理/消息隊列-地獄,甚至可以解釋的東西上述消息*事物之間有什么區別。

消息隊列解決方案(例如MQ系列或MSMQ)廣泛用於集成分布式企業應用程序,尤其是在不同平台上運行的應用程序。 如果做得正確(使用持久隊列,異步設計,而不是“ RPC over MQ”並注意操作要求),則與諸如RPC或樣板Web服務的同步請求/答復集成(其可用性是產品的產品)相比,它具有較高的可用性 。各自的可用性:同步集成具有99%可用性的十個系統,使您的綜合可用性不超過90%(如果只有一個薄弱環節,則更糟)。 請注意,這要求消息隊列本身具有高可用性:為此,我們使用大型機(猜測我們正在使用哪種產品!)。

消息(或集成)經紀人和“公共汽車”是更復雜的魚群。 他們可以添加

  • 不同內容表示形式之間的翻譯 (文本編碼和代碼頁)
  • 監督 ,檢測目標系統何時不接收排隊的消息並發出警報或自動重新啟動
  • 轉換 ,當系統不“說相同的語言”並以不同的方式表示例如客戶或產品記錄時:原則上這可以幫助您以不同的速率部署新版本
  • 路由 (直到並包括發布/訂閱),以使發送系統與收件人詳細信息的知識脫鈎,從而減少目標系統更改的影響
  • 業務流程 ,您可以在其中協調多個系統之間的消息以跟蹤更長的實際業務流程(例如,從客戶訂單到交貨再到發票)。

我已經按照難度(和潛在回報)的增加順序列出了這些功能。 您獲得的越高,為了獲得優勢,您的組織(包括業務部門)就越需要成熟。

在不涉及特定產品的細節的情況下,我可以為您提供使用典型的消息排隊系統的一些好處。

它們通常是用於模擬發布者/訂閱者模式的良好基礎結構。 想想一個大型事件系統,其中您不僅限於一個可執行文件,甚至一台機器。 您將信息放入這些隊列中,以便任何正在監聽數據的應用程序都可以獲取數據。

大多數消息排隊系統都允許持久隊列。 考慮一個典型的事件系統。 如果事件發生時偵聽器已斷開連接或以其他方式沒有響應,則該事件將丟失。 使用持久消息隊列,該消息將保留在隊列中,直到重新連接偵聽器為止。 這樣就不會丟失任何數據/事件。

我不了解您列出的產品,但是我知道使用JMS可以從隊列中彈出消息時對線程進行細粒度的控制。 從理論上講,您可以在每個隊列中有一個線程,並在消息被拉出時在該線程中執行操作。 另外,您也可以從多個隊列中提取消息並對它們執行操作,所有這些都在共享線程中進行。

雖然我對MQ Series的經歷非常痛苦,部分原因是合作伙伴將其推給了我們(一家Microsoft商店),但是MQ Series(或任何消息系統)的使用是該應用程序不可或缺的一部分。

從本質上講,我們正在構建一個流程來處理缺貨商品的供應鏈完整。 如果我們的合作伙伴分銷商沒有客戶想要的物品,他們會向B2B站點發送一條消息,該消息將定位於可以完成訂單的潛在公司。

我們建立了兩種不同的集成方式。 第一種是ftp方法,其中以固定間隔來回發送固定寬度的文件,並且我們添加了各種規則以幫助確保我們不會丟失任何數據。

第二種是使用MQ系列,其中使用保證傳遞將消息放入隊列中。 然后,我們將彈出隊列並處理消息。 排隊系統在這里是很大的好處,因為它使我們能夠以可靠的方式傳輸關鍵消息,從而使真錢四處流轉。

另一方面,對於同一MQ系列,我們必須實現一個同步查詢來獲取信息。 我們希望它是同步的,因為我們的用戶通過Web訪問它會等待獲取信息。 在MQ系列上執行此操作是一個非常有趣且痛苦的挑戰。 使用MQ的唯一原因是因為它是現有的通信線路,並且查詢功能已經存在。

第二個示例,這次是使用MSMQ,它是一個站點,該站點從注入到客戶端應用程序的Dialhome代碼中收集信息。 Dialhome代碼將收集功能使用情況統計信息,例如Microsoft的SQM程序。 當消息進入Web服務時,我們會將它們放在隊列中,然后我們可以讓任意數量的應用程序服務器彈出消息並將它們推送到數據庫中,再放入倉庫。

MSMQ在這里確保了我們可以通過將消息快速放入隊列來處理突發消息。 這有助於系統的可伸縮性和可靠性。

消息隊列對於實現負載平衡很有用。 例如,服務器接收“作業”消息(訂單,狀態消息...),並將其分發給所有偵聽客戶端。

消息隊列保證了消息將被准確地傳遞到一個客戶端。

如果客戶端在不同的計算機上運行,​​則總負載將被分配,並且在必要時很容易將另一個客戶端置於消息負載上,客戶端只需連接到隊列即可接收(某些)消息。

一個好的排隊系統使在多個線程,處理器,機器(甚至組織)上進行分布式計算變得更加容易。

前一段時間(10年),我使用一個消息發送隱喻來為經紀人經紀人實施前台期權定價系統。 我們已經用C ++,VB6和Excel / VBA實現了服務(甚至使用Excel求解器!),數據存儲為平面文件和sql,用Excel和VB6編寫的最終用戶應用程序具有復雜的數據模型(市場數據,收益)。曲線和體積曲面)。 異步消息傳遞(帶有持久/可靠的消息以及pub / sub)使整個事情變得非常有效和可擴展-我們能夠甚至在不訪問遠程站點的情況下也將東京和紐約的辦公室添加到倫敦的基礎設施中-這僅僅是一個標准的安裝。

我是一個狂熱的粉絲,盡管令我驚訝的是,他們在過去十年左右的時間里還沒有出現。

實際項目中的一個非常“接近要求​​”的示例。 誰跑了幾年。 在ActiveMQ上

1)航運市場貿易中心。

  • 貨運公司的系統知道誰可以實時發送多少個數據包。

  • 每個系統都是不同的(例如:語言,設計等)

  • 我們為每個公司編寫了一個適配器“ ActiveMQ的非常特殊的IT系統”

  • 每個適配器都有一個簡單的工作:在公司有可用空間時以什么價格發布。 (“運輸命題”)

  • 我們寫了一個客戶,收集所有“運輸命題”,並很好地展示它們。

=>塔達。 您有一個跨平台/語言/流程系統,適合不想互相交談的公司

=> Ta-da 2:如果一家新公司想加入您的交易系統,則只需編寫適配器。

暫無
暫無

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

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