如果按照上面的图,大家可能认为它很简单呀,一个发送消息,一个接受消息。但是在分布式系统中,需要通过网络进行通信的,就引入了数据传输的不确定性,也就是CAP理论中的P(分区容错性的问题),如下图所示:
很显然,正是因为跨网络,就会产生消息发送不一致的问题,也就是说,如果我的业务操作成功,那么有这个业务操作所产生的消息一定要成功投递出去,否则就丢失消息。那么我们该怎么解决这样的问题呢?
也就是如何保障消息发送一致性?通常我们在使用消息队列来处理业务都会遇到这样的场景:
public void CompleteOrder() { //订单处理 orderService.OrderProcess(); //财务处理(发送消息) ...... }