Date: 2017-08-18
Accepted
最近需要优化这样的场景,我们的合同状态有多种(待完善,待审核,审核通过,审核不通过等),每种状态的改变来自多个地方(中介后台,运营后台,风控系统等),每种状态的处理也来自多个地方(SAAS系统,中介后台,运营系统等),且处理者需要处理的状态不相同;
当前实现方案是:
- 定时任务,各个系统定时处理状态为 X 的合同(处理不及时);
- 使用回调,状态更新时回调至处理者处(扩展不方便);
-
消息服务(MNS) 主题模型
- 可订阅,并且可以通过 Tag 进行消息过滤;
- 只支持推送模式,每个消费者需要创建回调接口;
- 只支持外网地址推送,对内部服务来说,网络耗时太高。
-
消息服务(MNS) 队列模型
- 根据消费者创建队列,几个消费者就创建几个队列;
- 生产者根据消费者所需向其队列发送消息,即生产者需要发送相同消息至多个队列;
- 每增加一个消费者,都需更新所有对应生产者的代码,维护性太低。
-
消息服务(MNS) 主题+队列模型
- 根据消费者创建队列,几个消费者就创建几个队列;
- 生产着只需向主题队列发送消息,
消费者队列订阅所有主题队列的消息; 消费者需要接收所有消息,并在业务逻辑中过滤出自己需要处理的消息;- 消费者队列可以按 tag 进行过滤;
- 消费者完整消费自己的队列即可。
-
消息队列(ONS) MQ
- 总共只需一个 topic 队列,各个消费者通过 Tag 进行过滤;
- 完美支持我们的使用场景;
- 不提供 Python SDK。
- 方案 1,2 不用考虑;
- 使用方案 3,所有消费者需要处理所有的消息;
- 使用方案 4,需先实现其 SDK。
官方不建议用方案 4,我们尝试调试也不顺畅,所以决定使用方案 3。
Refs: