消息队列系统如何工作?

时间:2013-04-15 15:30:44

标签: message-queue distributed-system

我在课堂上学过消息队列系统,但我还是不知道这些消息队列系统在实时场景中是如何工作的?有没有可以帮助我全面了解的教程? 有人能解释我这些系统是如何工作的吗?

2 个答案:

答案 0 :(得分:11)

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

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

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

大多数邮件队列API还支持根据您指定的过滤器从队列中读取邮件。比如说你认为来自时间关键线程的消息比其他消息更重要。您可以在每次检查队列中的消息时,首先检查来自关键线程的消息,然后首先为这些消息提供服务。然后,如果没有找到来自关键线程的消息,您的线程将继续正常处理其余消息。

A C tutorial of the UNIX message queues

答案 1 :(得分:3)

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

  

消息队列是最佳方式之一,如果不是最好的话   实施分布式系统。

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

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

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

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