- 单向通知式API:包括服务的命令消息通道,以及服务接受的命令式消息的具体类型和格式 。
消息和消息通道模型是一种很好的抽象,也是设计服务异步API的好方法 。但是,为了实现服务,需要选择具体的消息传递技术并确定如何使用它们的能力来实现设计 。
3.2 使用代理消息消息代理是所有消息的中介节点 。发送方将消息写入消息代理,消息代理将消息发送给接收方 。使用消息代理的一个重要好处是发送方不需要知道接收方的网络位置 。另一个好处是消息代理缓冲消息,直到接收方能够处理它们 。有许多消息代理可供选择 。流行的开源消息代理包括:
- Apache RocketMQ
- RabbitMQ
- Apache Kafka
Kafka使用consumer group,特定的每个事件都发布到同一个分片,而且该分片中的消息始终由同一个接收方实例读取 。这样做就能够保证按顺序处理这些消息 。
3.4 重复消息处理理想情况下,消息代理应该只传递一次消息,但保证有且仅有一次的消息传递通常成本很高 。相反,大多数消息代理承诺至少成功传递一次消息 。当系统正常工作时,保证传递的消息代理只会传递一次消息 。但是客户端、网络或消息代理的故障可能导致消息被多次传递 。假设客户端在处理消息后、发送确认消息之前,它的数据库崩溃了,这时消息代理将再次发送未确认的消息,在数据库重新启动时向该客户端或客户端的另一个副本发送 。
3.4.1 编写幂等消息处理器如果应用程序处理消息的逻辑是满足幂等的,那么重复的消息就是无害的 。通常情况下应用程序逻辑通常不是幂等的 。或者可能正在使用消息代理,该消息代理在重新传递消息时不会保留排序 。重复或无序消息可能会导致错误 。在这种情况下,就必须编写跟踪消息并丢弃重复消息的消息处理程序 。
3.4.2 跟踪消息并丢弃重复消息消息接收方使用message id跟踪它已处理的消息并丢弃任何重复项 。
【分布式微服务中的第三方系统交互规范】
推荐阅读
- 什么是分布式和微服务
- 黑茶叶产地分布,黑苦荞茶产地
- 飞机|坐飞机也可畅快上网了?达美航空开始测试星链互联网服务
- 德意燃气灶维修网点?德意燃气灶全国维修服务电话?
- 手写微服务核心技术——负载均衡算法
- 分布式锁的三种实现方式
- 9种分布式ID生成方式,总有一款适合你
- 服务器系统哪家强 Ubuntu Server与CentOS
- linux服务器内存异常,究竟在哪消耗了2.5G?
- 黑茶茶区分布介绍,玉溪市古茶树区玉溪市古茶树区介绍