文章

Message Queue的使用經驗

以前做案子只有接觸IBM MQ,一直很天真的以為每種Message Queue都一樣,在接觸了Kafka、RabbitMQ、Tibco EMS,發覺真的都不太一樣,應該說各有各自適合的使用情境。

首先來看Kafka,Kafka在這裡面的執行效率最高,但是否是拋棄了什麼才能達到這個效能的極致就不得而知了。Kafka只有Topic的功能,而且只支援自己的Protocol,官方沒有提供JMS介面。當然我們也可以把Topic拿來當Queue用,但他不符合我需求的部分是:我要每個Queue都能讓不定數量的consumer存取(當然不能大於設定的最大連線數量),而Kafka Topic最多只能接受跟partition數一樣多的consumer(相同Group ID),超過這數字連上來的consumer會收不到訊息。

再來是RabbitMQ,他的Direct Reply To機制看似很方便,但以Production應用來說,這種近似黑箱作業的機制會導致維護作業相對地變複雜,他可以支援JMS,但需要加掛額外的plug-in,而且有些功能做不到,最重要的是沒有selector機制,所以不能用CorrelationID去取出指定的訊息,當訊息都回到相同的Queue時,似乎沒有什麼好方法可以只取回我們想要的那一筆。

Tibco EMS跟IBM MQ都可以符合我的要求,若本地維護廠商的支援能力是必須考量的項目時,我個人會選擇IBM MQ。

本文章以 CC BY 4.0 授權