Fork me on GitHub

RabbitMQ介绍

1:RabbitMQ是什么

1.1:协议

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

1.2:名词解析

RabbitMQ 内部结构:
drawing


①:Message
消息主要包括两部分,分别为 消息头、消息体。
消息头的一些可选属性如RoutingKey(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等都可在发布消息时设置。
消息体也就是payload,不透明的。

②:Exchange
交换机。和队列成绑定关系。主要职责就是将消息分配到队列。

③:Publisher
消息发送端,通常指发送消息的应用程序。

④:Consumer
消息消费端,通常指消费消息的应用程序。

⑤:Binding
用于消息队列和交换机进行关联匹配。

⑥:Queue
消息队列,用于存储消息的载体。

⑦:Connection
网络连接,如TCP、AMQP 连接。

⑧:Channel
信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内地虚拟连接,AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接。

⑨:Virtual Host
虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 / 。


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

2:RabbitMQ的几种作用

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

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

③:解耦


3:RabbitMQ的几种模式

3.1:fanout 模式

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

3.2:direct 模式

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

3.3:topic 模式

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

比如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']的消息。

3.4:header 模式

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

比如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

消费者构建过程

drawing

生产者构建过程

drawing

初始化ConnectionFactroy 代码:

drawing

所有代码可点击github查看


参考博客:https://www.jianshu.com/p/79ca08116d57

posted @ 2020-09-27 18:24  竹根七  阅读(329)  评论(0编辑  收藏  举报