3. rabbitmq 基本概念详解

consumer&producer

  • producer:
    • 建立channel.
    • 发送消息: 指定exchange name、routingKey、properties、body
  • consemer:
    • 建立Channel.
    • 声明queue,指定queue name.
    • 建立queue consumer
    • 循环监听获取message: 获取delivery.拿到message

exchange

接收消息,并根据routing key 转发消息所绑定的队列java

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.ui

direct exchange

全部发送到direct exchange的message 由routingkey转发到指定 queue编码

注意: Direct模式能够使用Rabbitmq自带的exchange:default exchange。因此不须要将exchange进行任何绑定操做,消息传递时,routingkey 必须彻底匹配才会被队列接收,不然该消息被抛弃。spa

routing key 不必定等于 queue name3d

topic exchange

全部发送到topic exchange的消息由routekey转发到指定topic的queuecode

exchange将eouteKey和某topic进行模糊匹配,此时队列须要绑定一个topic。cdn

模糊匹配:blog

'#' 匹配多个单词 '*' 匹配一个单词

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

相关文章
相关标签/搜索