消息传递系统场景

简介: 2.1.1 直接从Pro传递给Con许多消息传递系统使用Pro和Con之间的直接网络通信,而不通过中间节点

2.1.1 直接从Pro传递给Con

许多消息传递系统使用Pro和Con之间的直接网络通信,而不通过中间节点:


UDP组播广泛用于金融行业,如股票市场,低时延很重要。虽UDP本身不可靠,但应用层协议可恢复丢失的数据包(Pro必须记住它发送的数据包,以便能按需重发)。

无代理的消息库,如 ZeroMQ 和 nanomsg 采取类似的方法,通过 TCP 或 IP 多播实现发布 / 订阅消息传递

若Con在网络上公开了服务,Pro可直接发送 HTTP 或 RPC 请求将消息推送给使用者,即webhooks 背后想法,一种服务的回调 URL 被注册到另一个服务中,并且每当事件发生时都会向该 URL 发出请求。

尽管这些直接消息传递系统在设计它们的环境中运行良好,但是它们通常要求应用代码意识到消息丢失的可能性。容错程度有限:即使协议检测到并重传在网络中丢失的数据包,它们通常也只是假设生产者和消费者始终在线。


如Con脱机,则可能会丢失其不可达时发送的消息。一些协议允许生产者重试失败的消息传递,但当生产者崩溃时,它可能会丢失消息缓冲区及其本应发送的消息,这种方法可能就没用。


2.1.2 消息代理

一种广泛使用的替代方法:通过消息代理(message broker,也称为消息队列message queue)发送消息,消息代理实质上是一种针对处理消息流而优化的DB。作为服务器运行,生产者和消费者作为客户端连接到服务器。生产者将消息写入代理,消费者通过从代理读来接收消息。


将数据集中在代理,这些系统更容易容忍来来去去的客户端(连接,断开连接和崩溃),而持久性问题则转移到代理。一些消息代理只将消息保存在内存,而另一些消息代理(取决配置)将其写盘,以便在代理崩溃也不丢。针对缓慢消费者,它们通常会允许无上限的排队(而非丢弃消息或背压),尽管这种选择也可能取决配置。


排队结果是,消费者通常异步:当Pro发送消息时,通常只会等待代理确认消息已被缓存,而不等待消息被Con处理。向消费者递送消息将发生在未来某未定时间点,通常在几分之一秒内,但有时当消息堆积时会显著延迟。

目录
相关文章
|
8月前
|
消息中间件 存储 Cloud Native
揭秘发布订阅模式:让消息传递更高效
揭秘发布订阅模式:让消息传递更高效
揭秘发布订阅模式:让消息传递更高效
|
5月前
|
消息中间件 存储 开发者
实现AMQP的高效消息传递机制
【8月更文第28天】高级消息队列协议 (AMQP) 是一个为消息中间件设计的开放标准应用层协议。它为消息传递系统提供了标准化的方法,从而确保了高性能和可靠性。本文将详细介绍AMQP中的一些关键特性,并通过示例代码展示如何利用这些特性。
153 2
|
2月前
|
消息中间件 存储 监控
消息队列通信的优缺点
【10月更文挑战第29天】消息队列通信具有诸多优点,如解耦性强、异步通信、缓冲削峰等,能够有效地提高系统的灵活性、可扩展性和稳定性。但同时也存在一些缺点,如系统复杂性增加、性能开销、数据一致性挑战和实时性受限等。在实际应用中,需要根据具体的业务需求和场景,权衡其优缺点,合理地选择和使用消息队列通信机制,以实现系统的高效运行和优化。
|
7月前
|
消息中间件 存储 架构师
|
7月前
|
消息中间件 存储 监控
中间件消息发布者功能特性
【6月更文挑战第11天】
53 5
|
7月前
|
消息中间件 存储 中间件
中间件消息支持异步通信
【6月更文挑战第8天】
56 3
|
3月前
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现
消息队列系统中的确认机制在分布式系统中如何实现
|
3月前
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现?
消息队列系统中的确认机制在分布式系统中如何实现?
|
7月前
|
消息中间件 存储 监控
中间件消息传递
【6月更文挑战第10天】
60 2
|
6月前
|
消息中间件 存储 Java
使用RabbitMQ实现可靠的消息传递机制
使用RabbitMQ实现可靠的消息传递机制