我在课堂上学习过消息队列系统,但我仍然不明白这些消息队列系统是如何在实时场景中工作的?是否有任何教程可以帮助我获得完整的图片?有人可以解释一下这些系统是如何工作的吗?
2 回答
一个例子:我的线程或进程可以向您的消息队列发送一条消息,并且在发送它之后,我的代码继续执行其他操作。您的代码在处理它时,会从消息队列中读取下一条消息,然后决定如何处理该消息。消息队列避免了需要在两个线程或进程之间共享临界区或互斥锁。底层消息队列层本身负责确保消息进入队列而没有影响队列完整性的竞争条件。
消息队列可用于单向和双向异步消息传递。对于单向使用,我的线程可以使用它来让您的线程评估我线程中的关键事件,而无需从您的线程确认。对于双向使用,在我的线程向您的线程发送消息后,您的线程可能需要通过我的消息队列将数据发送回我的线程。
消息队列层使用较低级别的同步方案来确保队列中没有两个写入者可以同时写入。它确保对队列的所有写入都是原子的。它还确保队列的读取器无法从队列中读取部分写入的消息。
大多数消息队列 API 还支持根据您指定的过滤器从队列中读取消息。例如,假设您认为来自时间关键线程的消息比其他消息更重要。您可以在每次检查队列中的消息时,首先检查来自关键线程的消息,然后首先处理这些消息。然后,您的线程将继续正常处理其余消息,前提是不再找到来自关键线程的消息。
这是一个复杂的话题,但简单地说:
消息队列是实现分布式系统的最佳方式之一,如果不是最好的话。
现在你可能会问,什么是分布式系统?它是一个跨越多台机器、客户端或节点的集成系统,它们以无中断的方式并行执行其任务。分布式系统应该足够健壮,以便在一个或多个节点发生故障、停止工作、滞后或因维护而停机时继续运行。
那你可能会问,什么是消息队列?它是一种面向消息的中间件,可以通过使用异步消息通过网络进行节点间通信来开发分布式系统。
最后你可能会问,这一切有什么用?这有利于实现具有大量称为节点的移动部件的应用程序,这些部件需要实时监控和实时反应能力。总而言之,它们提供:并行性(节点可以真正并行运行)、紧密集成(所有节点以相同的顺序看到相同的消息)、解耦(节点可以独立发展)、故障转移/冗余(当一个节点发生故障时,另一个节点可以正在运行并建立状态以立即接管),可扩展性/负载平衡(只需添加更多节点),弹性(节点可以在活动高峰期滞后而不影响整个系统)和弹性(节点可以失败/停止工作而不采取整个系统停机)。
查看这篇详细讨论消息队列基础结构的文章。