consumer&producer
- producer:
- 创建channel.
- 发送消息: 指定exchange name、routingKey、properties、body
- consemer:
- 创建Channel.
- 声明queue,指定queue name.
- 创建queue consumer
- 循环监听获取message: 获取delivery.拿到message
exchange
接收消息,并根据routing key 转发消息所绑定的队列
exchange属性
- name 交换机名称
- type 交换机类型 direct、topic、fanout、headers
- Durability 是否持久化
- auto delete: 当最后一个绑定到exchange上的队列删除后,自动删除该exchange
- internal 是否用于rabbitmq内部使用,默认false。一般不改。
- arguments 扩展参数。
default exchange
amqp.default routingKey为queue name
The default exchange is implicitly bound to every queue, with a routing key equal to the queue name. It is not possible to explicitly bind to, or unbind from the default exchange. It also cannot be deleted.
direct exchange
所有发送到direct exchange的message 由routingkey转发到指定 queue
注意: Direct模式可以使用Rabbitmq自带的exchange:default exchange。所以不需要将exchange进行任何绑定操作,消息传递时,routingkey 必须完全匹配才会被队列接收,否则该消息被抛弃。
routing key 不一定等于 queue name
topic exchange
所有发送到topic exchange的消息由routekey转发到指定topic的queue
exchange将eouteKey和某topic进行模糊匹配,此时队列需要绑定一个topic。
模糊匹配
:
'#' 匹配多个单词 '*' 匹配一个单词
fanout exchange
不处理任何routing key. 只需要将队列绑定到交换机上,不管rk。
转发最快,性能最好。
binding
exchange和exchange、queue之间的连接关系
binding中包含routing key 和其他参数
queue
存储消息数据
持久化
自动删除
Message
服务器和应用程序之间传送的数据
本质上是一段数据:Properties、Payload(Body)组成
常用属性:delivery mode 、headers 自定义属性 其他属性:content_type、content_encoding priority 其他属性:correlation_id reply_to expiration message_id
发送带有附加属性的message
Delivery Mode 2: 持久化投递 1:非持久化投递
Map<String, Object> headers = new HashMap<>();
headers.put("my1", "111");
headers.put("my2", "222");
AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
.deliveryMode(2) //持久化
.contentEncoding("UTF-8") //编码方式
.expiration("10000") //发送后10s自动清除
.headers(headers)
.build();
复制代码
virtual host
虚拟主机 用于进行逻辑隔离 最上层的消息路由
一个virtual host里面可以有若干个exchange queue
但不能用同名的exchange queue