2010-05-19 73 views
26

在我的團隊中,我們使用IBM MQ技術進行跨應用程序通信。我最近在Hacker News和其他關於其他MQ技術的地方看到過,例如RabbitMQ。我對它是什麼有一個基本的瞭解(一個常用的放置和獲取消息的區域),但是我想知道它究竟有什麼優點?我將如何知道我想在哪裏以及何時使用它?爲什麼不堅持更簡單的進程間消息傳遞?什麼是MQ,我爲什麼要使用它?

回答

40

到目前爲止所有的解釋都是準確的並且重點 - 但可能會丟失一些東西:消息隊列的主要優點之一:恢復力。

想象一下:您需要與兩個或三個其他系統進行通信。如果你現在需要一個答案,現在常見的方法是網絡服務,這很好。

但是:Web服務可能會關閉並且不可用 - 那麼您該怎麼做?將消息放入消息隊列(在您的計算機/服務器上也有一個組件)通常會在這種情況下起作用 - 您的消息只是無法傳遞並因此而被處理 - 但它會在稍後時間服務的一面回到在線狀態。

因此,在很多情況下,使用消息隊列連接不同的系統是一種更可靠,更穩健的來回發送消息的方式。它並不適用於所有情況(如果您想知道MSFT的股票價格,請將該請求放入隊列可能不是最好的想法) - 但在很多情況下,例如向您的訂單供應商的消息隊列,它運行得非常好,可以幫助緩解其他技術的一些可靠性問題。

+0

非常有趣的用例,對我來說很有意義。謝謝! – daveslab 2010-05-20 01:10:03

+1

那麼,如果MQ服務器關閉,你會怎麼做?它不是比Web服務更有彈性,是嗎? – 2015-04-14 17:29:41

+1

@RobHolmes:通常情況下,您仍然可以*將它排入您的本地隊列中 - 當它返回時它會被傳輸到隊列服務器 - **是**,它** IS **比典型的web更具彈性服務..... – 2015-04-14 18:16:43

2

MQ僅代表Message Queue。

當您需要可靠地發送不依賴於時間的進程間/跨平臺/跨應用程序消息時,您可以使用它。

消息隊列接收消息,將其放入適當的隊列中,並等待應用程序在準備就緒時檢索消息。

6

消息排隊系統應該給你幾個獎金。其中最重要的是監控和交易行爲。

如果您想避免故障(例如電源故障),交易設計非常重要。想象一下,你想通知一個ATM取款機的銀行系統,無論哪個服務器暫時在中間出現故障,每個請求只能執行一次。 MQ系統將允許您協調跨多個數據庫,MQ和其他系統的事務。不用說,與命名管道,TCP或其他非事務性工具相比,這樣的系統非常緩慢。如果需要高性能,則不會允許通過磁盤寫入消息。相反,它會讓你的設計複雜化 - 實現異國情調的可靠和快速通信,這將推動設計師變得非常不平凡的技巧。

MQ系統通常允許用戶觀看隊列內容,編寫插件,明確queus等

+0

很好的答案,謝謝你的輸入! – daveslab 2010-05-20 01:09:34

11

MQ代表消息隊列。

它是一個抽象層,允許多個進程(可能在不同的機器上)通過各種模型(例如,點對點,發佈訂閱等)進行通信。根據實施情況,可以配置保證可靠性,錯誤報告,安全性,發現,性能等等。

您可以使用套接字手動完成所有這些工作,但這非常困難。

例如:假設您想要進程進行通信,但其中一個可能在中途死亡,然後重新連接。你如何確保臨時消息不會丟失? MQ解決方案可以爲你做到這一點。

0

消息隊列構成了傳統的「企業集成模式」和website中描述的許多模式的基礎。

0

參考:Web服務可能會關閉並且不可用 - 那麼您該怎麼做? 作爲對此的延伸;如果你的本地網絡和你的本地電腦壞了,怎麼辦?當您等待系統在其他地方恢復依賴部署的系統時,等待數據需要查看替代數據流。 否則,這對於今天和即將在未來物聯網(IOT)要求中的「實時」響應可能不夠好。如果你想要真正的並行,各種FIFO流的非易失性存儲(至少在信號鏈的某個點)使用FPGA和FRAM存儲器。 FRAM以時鐘速度運行,FPGA器件可以實時重新編程,但需要許多獨立的並行數據流(在規定的限制範圍內)。

相關問題