RabbitMQ基本原理和使用场景

1.RabbitMQ和消息队列是什么?

(1)RabbitMQ其实就是一个消息中间件,主要就是负责 消息发送和消息接收的一个基础软件。
(2)消息队列,顾名思义就是把一些消息放到一起排个队。类似一个常量池一样。有自己的编号,等待别人点名。消息队列主要有三个概念:生产者、消息队列、消费者。


![rabbitmq.png](https://upload-images.jianshu.io/upload_images/8141531-bac135b1d1deaf42.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2.RabbitMQ如何运用于消息队列?

(1)对于MQ来说。除了上面三个概念,还加入了一个交换机的概念。也就是:生产者、交换机、消息队列、消费者。简单来说就是将消费者和消息队列做了隔离。用交换机来决定消息发布到那个队列。因为消息队列可能有很多个。
(2)MQ服务的结构图


rabbitmq.png

如上图所示
Clients生产者P
X代表交换机Exchange、红色部分是Queue消息队列(二者为Server)
Clients消费者C

3.RabbitMQ简单运作流程

3.1交换机Exchange是什么?

交换机根据一定规则决定了生产者的消息被投放到那个消息队列,算是一个中转站吧。官方说就是:接收到消息绑定到某个队列
【交换机有四种类型】
(1)Direct是默认的模式,也是最简单的模式。也就是说,如果你创建一个消息队列并设置了一个boundingkey为admin123,生产者发送消息的时候,也会指定一个key .如果boundingkey和key相同的时候,这个消息就能放入到你创建的队列中。
(2)topic是匹配通配符。发送消息的时候,交换机指定的key和该模式相匹配的时候,才能建立绑定关系,消息就能放入到匹配成功的队列。
(3)header是匹配键值对,队列和交换机都会指定一组键值对。如果匹配成功,消息就可以放入到匹配成功的队列。
(4)Fanout,是广播的形势,消息会放入到所有队列。及时设置了key也无效了。

3.2消息队列的使用流程?

(1)客户端连接消息队列服务器,建立一个通道channel
(2)客户端生成Exchange,设置相关属性
(3)客户端生成Queue,设置相关属性
(4)客户端使用routingKey,让交换机和队列之间建立绑定关系。
(5)客户端发送消息到Exchange交换机,交换机负责投入到队列。

4.SpringBoot整合RabbitMQ

4.1在SpringBoot中配置参数有哪些?
spring.rabbitmq.addresses指定client连接到的server的地址,多个以逗号分隔.
spring.rabbitmq.dynamic是否创建AmqpAdmin bean. 默认为: true)
spring.rabbitmq.host指定RabbitMQ host.默认为: localhost)
spring.rabbitmq.listener.acknowledge-mode指定Acknowledge的模式.
spring.rabbitmq.listener.auto-startup是否在启动时就启动mq,默认: true)
spring.rabbitmq.listener.concurrency指定最小的消费者数量.
spring.rabbitmq.listener.max-concurrency指定最大的消费者数量.
spring.rabbitmq.listener.prefetch指定一个请求能处理多少个消息,如果有事务的话,必须大于等于transaction数量.
spring.rabbitmq.listener.transaction-size指定一个事务处理的消息数量,最好是小于等于prefetch的数量.
spring.rabbitmq.password指定broker的密码.
spring.rabbitmq.port指定RabbitMQ 的端口,默认: 5672)
spring.rabbitmq.requested-heartbeat指定心跳超时,0为不指定.
spring.rabbitmq.ssl.enabled是否开始SSL,默认: false)
spring.rabbitmq.ssl.key-store指定持有SSL certificate的key store的路径
spring.rabbitmq.ssl.key-store-password指定访问key store的密码.
spring.rabbitmq.ssl.trust-store指定持有SSL certificates的Trust store.
spring.rabbitmq.ssl.trust-store-password指定访问trust store的密码.
spring.rabbitmq.username指定登陆broker的用户名.
spring.rabbitmq.virtual-host指定连接到broker的Virtual host.
4.2引入相对应的pom文件
rabbitmq-pom.png

5.RabbitMQ除了发送消息,还能异步执行方法,减少服务器端响应。

你可能感兴趣的:(RabbitMQ基本原理和使用场景)