消息队列系统如何工作?

Hai*_*Ali 8 message-queue distributed-system

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

Dav*_*man 12

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

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

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

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

UNIX消息队列的AC教程


rda*_*ida 5

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

消息队列是实现分布式系统的最好方法之一,即使不是最好的方法。

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

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

最后您可能会问,这有什么用?这对于使用带有大量称为节点的移动部件的应用程序实现是很有用的,这些部件需要实时监控和实时反应功能。概括地说,它们提供了:并行性(节点可以真正并行运行),紧密集成(所有节点以相同的顺序看到相同的消息),去耦(节点可以独立发展),故障转移/冗余(当一个节点发生故障时,另一个可以运行并建立状态以立即接管),可伸缩性/负载平衡(仅添加更多节点),弹性(节点可能在活动高峰期间滞后而不会影响整个系统)和弹性(节点可能会失败/停止工作而没有采取任何行动)整个系统关闭)。

请检查这篇文章,其中详细讨论了消息队列基础结构。