MQ 使用规范

mq消息有序性

按目前的业务情况,风控模块的查询列表需要进件模块的查询条件,比如进件编号,身份证号码等。所以风控模块需要容易部分进件模块的数据。

通常通过mq实现数据增量同步。那么涉及到一个问题:消息的顺序问题

方案1: 进件模块将用户信息修改变更的内容推送给风控模块,风控模块消费消息,更新冗余表。

此方案,虽然可以在消息发送方通过路由策略是发送的消息有序,但是无法保证消费端的消费有序。因为消息消费端为分布式服务。消息分配后,有些机器消费的快点,有些消费的慢点。可能存在消息2优先于消息1处理完。最终导致数据颠倒。  此方案存在隐患

 

方案2(正确的方案)

进件系统修改客户信息,只需要将表,修改的记录的主健发给风控。风控收到消息后,调用进件模块的rpc接口,查询客户信息,更新到冗余表。

 

通用消息结构体

  

data {table:xxx,id:xx}
uuid 唯一事件id,幂等性保证
timestamp 消息生成的时间

 

[重构例子example]

1 源头数据修改通过mq通知消费端,需要使用广播模式。而流程转化mq使用的组播模式。

2 消息体定义  。如果是数据变更,消息体大概这样(设计的时候再做考量)

  

type 标示是数据变更 还是流程流转[老车贷重构专用,别的场景不需要]
data {table:xxx,id:xx}
uuid 唯一事件id,幂等性保证
timestamp 消息生成的时间

 

流程变化

type 标示是数据变更 还是流程流转
event 通知的事件类型,比如进件提交
data {} 冗余数据等
uuid 唯一事件id,幂等性保证
timestamp 消息生成的时间

 

 topic,consumergroup 必须通过枚举形式在模块的facade包里面定义。 producer的消息体也在facade包里面定义。

  举个例子

 

消息幂等性

消息消费必须保证幂等性。在mq的生产端,每条消息,需要赋予一个唯一的事件id。 消费端的幂等性参考rpc的幂等性。

你可能感兴趣的:(MQ 使用规范)