服务器进程必须不间断地执行任务,而不是互相等待。这就是他们异步对话的原因。每个人在有话要说时都会说话,在准备好执行新任务时会倾听。消息在整齐分开的队列中度过等待时间。
消息队列系统
在消息队列中,工作分为三个部分。第一个组件是生产者,负责创造就业机会。然后生产者将作业描述打包成消息并发送给消息存储。这会接受消息并将其放入队列中。第三个组件(消费者)然后从队列中获取最旧的消息并执行其中描述的作业。一旦消息被成功传递,它就会从队列中删除。
消息队列描述了一个将作业的创建与其执行分开的过程 - 系统的解耦。不仅生产与加工脱钩,而且组件的时间依赖性也脱钩。消息在被消费者接收之前可以在队列中保留很长时间。
在最简单的版本中,消息队列是一种单向消息系统,这意味着 美国消费者电子邮件列表 消息始终从生产者通过队列流向消费者。这意味着生产者不会从消费者那里收到关于作业是否已经执行或者是否可以执行的反馈。最好的情况是,他收到有关消息是否可以放入队列的反馈。如果他需要消费者的反馈,则必须设置第二个队列作为响应通道。然后生产者和消费者在响应通道上交换角色。
即使通过两个队列建立了双向通信,生产者和消费者也是完全解耦的。例如,如果生产者被更高效的应用程序取代,消费者将不会注意到任何事情 - 至少只要消息格式保持不变。因为消费者只是从队列中获取下一条消息并处理它。谁把消息放在那里与消费者无关。
消息队列的一个重要优点是时间解耦。假设生产者创造就业机会的速度如此之快,以至于消费者不再能够在合理的时间内处理它们。然后可以启动消费者应用程序的其他实例,然后一起处理队列中的作业。当然,反之亦然。如果生产者创建作业的速度不够快,则可以启动生产者的其他实例来减轻消费者的负载。
消息队列(MQ)
MQ 模型也称为点对点(P2P),是一种一对一的消息系统。但是,这并不意味着队列代表两个应用程序之间的专用消息通道。任意数量的生产者可以将他们的消息放入队列中,另一方面,任意数量的消费者可以获取他们的消息。消息队列仅保证每条消息仅传递一次。哪个生产者发布了消息以及哪个消费者处理了该消息并没有预先确定。如果消息被传递给某个消费者,则所有其他消费者将不再收到该消息。
MQ 模型可以实现为拉或推方法。通过拉取过程,消费者有责任在有空闲容量时立即获取新消息。通过推送过程,消费者向消息队列注册并从中接收消息。这样,消息队列还可以充当负载均衡器,将任务均匀地分配到多个并行工作进程中。
如果消息到达时没有可用的消费者,则消息将保留在队列中,直到可以传递给消费者。当消息只能处理一次时(例如帐户预订),始终可以使用消息队列。
发布订阅(Pub/Sub)
在发布-订阅上下文中,生产者称为发布者,消费者称为订阅者。我们通常谈论话题,而不是队列。主题是由关键字“主题”标识的队列。