一、消息中间件有什么特别的作用?消息中间件可以做的事情,用http请求接口不是一样可以做吗?
1、解耦
<现在有A、B、C、D四个系统,系统A有一数据,系统B、C、D都需要这个数据。 那么我们可以通过接口调用的方式,在系统A中调用系统B、C、D的接口将数据传输过去。 此时对于系统A来说,系统A需要知道哪些系统需要这个数据,如果比较多的系统都需要这个数据,那么系统A需要在程序中依次调用这些系统的接口。 而且如果调用接口失败,还需要做重试或者补偿动作。 如果这时系统B不在需要这个数据了,并且修改了接口中的一些业务逻辑,不再需要系统A调用了. 这时还需要修改系统A,不再调用系统B的接口,这是一种耦合,系统B不再需要这个数据了,属于系统B的修改,应该尽量不涉及到系统A的修改。 同样的如果此时又有系统E需要这个数据,那么还是要修改系统A,增加调用系统E的接口的逻辑,也是一种耦合。 如果使用消息中间件: 系统A不再需要考虑与各个系统之间的调用情况,网络情况,调用失败等情况.系统A只需要把自己的一份核心数据发到MQ里,其他哪个系统感兴趣自己去根据主题啦、top啦去消费即可。 其他系统如果不想要这个数据了,不去订阅消费这个数据就可以了,如果想要这个数据,去订阅消费就可以了。
/>
2、流量削峰
主要是延缓请求,如果请求在某一时刻突然暴涨,这些请求如果全部打到服务器上,对服务器是一种极大的负担,可能会导致服务器宕机,对系统的稳定性造成极大影响。流量削峰,就是将这一时刻的请求,平摊到不同的时间片,就是把请求摊开那种感觉。就像流量削峰前,平均处理时间是2S,但是会有较多的请求返回失败信息;流量削峰后,平均处理时间是5S,但是大多数请求都是返回正常信息。