3. rabbitmq 基本概念详解

本文详细介绍了消息队列的工作原理,包括producer与consumer的角色划分,exchange的四种类型:direct、topic、fanout、headers及其特性,以及queue的存储机制。探讨了不同类型的exchange如何根据routingkey转发消息至相应的队列,解释了binding的概念,以及消息的持久化和自动删除等关键属性。

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

转载于:https://juejin.im/post/5d030e85f265da1ba77ca044

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值