2013-04-15 27 views
5

我已经在我的课中学习了消息队列系统,但是我仍然不明白这些消息队列系统如何在实时场景中工作?有没有任何教程可以帮助我获得完整的图片? 有人能解释我这些系统是如何工作的吗?Message Queue系统如何工作?

+1

[wikipedia文章](http://en.wikipedia.org/wiki/Message_queue)是一个很好的开始。 –

回答

10

举例:我的线程或进程可以向您的消息队列发送消息,并发送消息,我的代码继续执行其他操作。您的代码在接近它时从消息队列中读取下一条消息,然后决定如何处理该消息。消息队列避免需要在两个线程或进程之间共享关键部分或互斥体。底层消息队列层本身负责确保消息进入队列,而不会影响队列完整性的竞争条件。

消息队列可用于单向和双向异步消息传递。对于单向使用,我的线程可以使用它来让线程评估我线程中的关键事件,而不会从线程返回确认。对于双向使用,在我的线程向您的线程发送消息后,您的线程可能需要通过我的消息队列将数据发回给我的线程。

消息队列层使用较低级别的同步方案来确保没有两个写入队列的队列可以同时写入。它确保对队列的所有写入都是原子的。它还确保队列的读者不能从队列中读取部分写入的消息。

大多数消息队列API还支持根据您指定的过滤器从队列中读取消息。举例来说,您认为来自时间关键型线程的消息对其他消息更重要。您可以在每次检查队列中的消息时,首先检查关键线程中的消息,并首先处理这些消息。如果没有找到来自关键线程的更多消息,您的线程将继续处理剩余的消息。

A C tutorial of the UNIX message queues

2

这是一个复杂的话题,但简单地说:

消息队列是的最好途径之一,如果不是最好的,以 实现分布式系统。

现在你可能会问,什么是分布式系统?它是一个跨越多台机器,客户机或节点的集成系统,它们以不中断的方式并行执行其任务。分布式系统应该足够强壮,可以在一个或多个节点出现故障,停止工作,滞后或停机维护时继续运行。

那么你可能会问,什么是消息队列?它是一种面向消息的中间件,它通过使用异步消息来实现分布式系统的开发,用于通过网络进行节点间通信。

最后你可能会问,这有什么好处?这对于实现具有许多需要实时监控和实时反应能力的称为节点的移动部件的应用是很好的。总而言之,它们提供了:并行性(节点可以真正并行运行),紧密集成(所有节点以相同顺序看到相同的消息),解耦(节点可以独立演化),故障转移/冗余(当节点失败时,另一个可以运行和建立状态立即接管),可伸缩性/负载平衡(只需添加更多节点),弹性(节点可以在活动高峰期间滞后而不会影响整个系统)和弹性(节点可以失败/停止工作,整个系统下降)。

检查this article详细讨论消息队列基础结构。