Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 为什么队列/FIFO排序在消息队列中很重要?_Design Patterns_Data Structures_Message Queue - Fatal编程技术网

Design patterns 为什么队列/FIFO排序在消息队列中很重要?

Design patterns 为什么队列/FIFO排序在消息队列中很重要?,design-patterns,data-structures,message-queue,Design Patterns,Data Structures,Message Queue,消息传递提供程序的一个选项是,它提供FIFO排序,即队列。为什么消息的顺序很重要?我想知道这是因为信息的优先级还是类似的原因。如果有人能举例说明,我将不胜感激。任何首先进入消息缓冲区的内容都应该首先得到服务。消息队列用于保留所接收消息的顺序。队列是先入先出的。以下是我写的答案: 通过实现队列数据结构,使用者将按照发送消息的顺序接收消息。例如,企业系统中的订单系统向销售系统发送一些消息。让这些是“获取付款”和“发货”。如果这些消息没有排队,销售系统可能会在“获得付款”之前通知“发货”,从而出现故障

消息传递提供程序的一个选项是,它提供FIFO排序,即队列。为什么消息的顺序很重要?我想知道这是因为信息的优先级还是类似的原因。如果有人能举例说明,我将不胜感激。

任何首先进入消息缓冲区的内容都应该首先得到服务。消息队列用于保留所接收消息的顺序。队列是先入先出的。

以下是我写的答案:

通过实现队列数据结构,使用者将按照发送消息的顺序接收消息。例如,企业系统中的订单系统向销售系统发送一些消息。让这些是“获取付款”和“发货”。如果这些消息没有排队,销售系统可能会在“获得付款”之前通知“发货”,从而出现故障

其思想是维护企业级工作流


PS:Plamen有更深入的答案。

您的答案是正确的-从逻辑上讲,某些操作是相互依赖的,您必须保持调用顺序

但我认为这其中还有一个更重要的纯技术方面,我想指出:您需要知道实现ACID事务的顺序

以以下场景为例:

您有一个流程服务,它协调了其他5个实体/实用程序服务。进程被触发并开始执行,但第三次调用失败。通常情况下,在服务之间拥有一个公共事务上下文(为了实现两阶段提交)代价太高,因此解决方案是使用补偿,即调用所有在失败之前已经执行了写操作的服务的相反操作。如果您不能保证消息的顺序,您就不可能知道应该回滚什么和不回滚什么(如果您没有明确查看底层系统并自己跟踪更改,但这不是一种明智的方法)


希望这有帮助

感谢您的回答,我想从企业系统的角度来回答,而不是从技术角度。再次感谢你,我完全理解你的意思。这让事情变得更清楚了。谢谢你的帮助,伙计。