RabbitMQ


消息中间件:传递、存储、分发

1、消息队列有什么作用?

解耦:使用消息队列来作为两个系统的通讯方式。两个系统不需要相互依赖,实现解耦。

异步:系统A给消息队列发送消息后,可以非阻塞执行其他任务。

流量削峰:使用消息队列的方式来调用某个系统,那么消息将在队列中排队,由消费者自己控制消费速度

2、如何保证消息不被重复消费

3、为什么消息中间件不直接使用HTTP协议呢?

       因为http请求报文头和响应报文头是比较复杂的,包含了cookie,数据的加密解密,状态码,响应码等附加的功能,但是对于一个消息而言,我们并不需要这么复杂,也没有这个必要性,它其实就是负责数据传递,存储,分发就行,一定要追求的是高性能。尽量简洁,快速。
      大部分情况下http大部分都是短链接,在实际的交互过程中,一个请求到响应很有可能会中断,中断以后就不会就行持久化,就会造成请求的丢失。这样就不利于消息中间件的业务场景,因为消息中间件可能是一个长期的获取消息的过程,出现问题和故障要对数据或消息就行持久化等,目的是为了保证消息和数据的高可靠和稳健的运行。
常见的消息中间件协议有:OpenWire、AMQP、MQTT、Kafka,OpenMessage协议。