2013年9月2日 星期一

[筆記]在設計MQ時到底何時該用哪種Exchange Type




在討論MQ何時應該使用哪一種Exchange Type前,讓我們先來看看到底有多少種Exchange type可以選擇,因為每一種Exchange type都有適合的情境。



在設計與使用MQ的時候,有哪些需要注意的準則呢?以下內容節錄自 Best Practices for Maximizing Scalability and Cost Effectiveness of Queue-Based Messaging Solutions on Windows Azure

Queue-Based Messaging Fundamentals

A typical messaging solution that exchanges data between its distributed components using message queues includes publishers depositing messages into queues and one or more subscribers intended to receive these messages. In most cases, the subscribers, sometimes referred to as queue listeners, are implemented as single- or multi-threaded processes, either continuously running or initiated on demand as per a scheduling pattern.

At a higher level, there are two primary dispatch mechanisms used to enable a queue listener to receive messages stored on a queue:

    Polling (pull-based model): A listener monitors a queue by checking the queue at regular intervals for new messages. When the queue is empty, the listener continues polling the queue, periodically backing off by entering a sleep state.

    Triggering (push-based model): A listener subscribes to an event that is triggered (either by the publisher itself or by a queue service manager) whenever a message arrives on a queue. The listener in turn can initiate message processing thus not having to poll the queue in order to determine whether or not any new work is available.

所以在選擇Exchange Type 前要先思考,我們要的是Polling 還是 Triggering?

It is also worth mentioning that there are different flavors of both mechanisms. For instance, polling can be blocking and non-blocking. Blocking keeps a request on hold until a new message appears on a queue (or timeout is encountered) whereas a non-blocking request completes immediately if there is nothing on a queue. With a triggering model, a notification can be pushed to the queue listeners either for every new message, only when the very first message arrives to an empty queue or when queue depth reaches a certain level.

那到底最常用的有哪幾種?

Message Bus 






圖片來源:Message Bus



Command Message






圖片來源:Command Message



Message Route


圖片來源:Message Route



Dynamic Router


張貼留言