为什么要使用消息中间件
- 解耦
A服务调用B,C服务,后续后其他服务接入地方,A服务始终要改。举个例子:A触发了一个扫码事件,扫完码之后,会有模板推送(调用了B服务)、跳转到某一个页面(调用了C服务)。后面假如你还想产生其他事件,A服务会越调越多,A服务依赖其他服务也会越来越多。
而有了消息中间件,我们可以使这类的业务解耦,A将消息写入消息队列,需要消息的系统,订阅相应的主题,进行消费。 - 异步
还是拿上面的例子举例,A服务调用的服务越多,那么相应的时间就越久,而这些业务又是必须马上相应的,那么我们可以采用异步的方式,让服务consumer多订阅进行消费,加快相应速度 - 削峰
数据库的并发量是有一定瓶颈的,所以我们可以按照数据库能处理的并发量,利用消息中间件,拉取相应的消息,进行消费。
使用消息中间件考虑点
保证消息高可用
可以想到的一种情况是,如果消息总线挂了怎么办?
可以搭建高可用集群HA Cluster。
防止消息重复消费
一般消息消费完之后,会发送一个确认消息到服务端,告诉服务端消息以及消费过了,可以进行销毁,那么为什么还会出现消息重复消费呢?回答:网络传输等等故障,确认信息没有传送到服务端,所以有重复消费的可能。怎么办呢?对消费过的消息,进行记录,比如用Redis存放消息的唯一标识。
保证消息的顺序性
单线程处理消息