初识RabbitMQ

1:RabbitMQ是什么

协议

RabbitMq是基于AMPQ协议的一种 消息中间件

消息路由过程

简单路由

RabbitMq 拿到消息之后,会先交给 交换机 (Exchange), 然后交换机再根据预先设定的不同绑定( Bindings )策略,来确定要发给哪个队列。

灵活路由

根据 RoutingKey 和 Arguments 来灵活匹配队列

ExchangeName(交换机名称)+QueueName(队列名称)+RoutingKey+Arguments(头部属性) 四种属性组合确定最终消费队列。

tip:当mq模式为topic时,同ExchangeName同QueueName不能使用不同的routingKey

2:RabbitMQ的几种作用

削峰

适用于实时性不高,大批量请求的场景。
比如10086群发百万级的中秋节祝福短信。

异步

适用于主要业务和其他业务进行分离的场景。
比如在用户进行注册时,用户信息的插入肯定是同步的,但是用户的账户开通邮件可以是异步的。

解耦


3:RabbitMQ的几种模式

fanout 模式

类似于广播的作用。
生产者将消息发送到某个队列,凡是绑定该队列的消费者都将消费这个消息。

direct 模式

具有分食的作用。
生产者将消息发送到某个队列,绑定该队列的所有消费者将各自消费这个消息,
该消息指派给某个消费者并确认消费后,不会再派发给其他消费者。

topic 模式

类似于订阅的作用。
生产者将消息发送到某个队列,但队列中存在订阅了不同的topic(routingKey)的消费者,
这些消费者只会消费自己订阅了的topic的消息。

比如consumer_a 在‘bac’队列订阅了topic='rk.a'的消息,那么他只会收到topic='rk.a'的消息。
比如consumer_b 在‘bac’队列订阅了topic='rk.b'的消息,那么他只会收到topic='rk.b'的消息。
比如consumer_c 在‘bac’队列订阅了topic='rk.*'的消息,那么他只会收到topic=['rk.a','rk.b']的消息。

header 模式

在一堆条件中具有任意匹配和全匹配的作用。

比如consumer_a 在‘bac’队列绑定了header={'id':1,"gz":2}的消息,
匹配模式是'any',那么收到的消息可以为header={'id':1,"gz":2} 或者 header={'id':1,"gz":1}的消息。
匹配模式是'all',那么收到的消息只能为header={'id':1,"gz":2}的消息。


4:JAVA中如何使用RabbitMQ

消费者构建过程

生产者构建过程

初始化ConnectionFactroy 代码:


所有代码可点击github查看

原文地址:https://www.cnblogs.com/zgq7/p/13692616.html