RabbitMQ使用说明,配置属性说明

简介

介绍

RabbitMQ 是一个由 erlang 开发的基于 AMQP(Advanced Message Queue)协议的开源实现。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面都非常的优秀,是当前最主流的消息中间件之一。RabbitMQ 官网:http://www.rabbitmq.com

AMQP

AMQP 是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,同样,消息使用者也不用知道发送者的存在。AMQP 的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

系统架构

在这里插入图片描述
消息队列的使用过程大概如下:

  • 客户端连接到消息队列服务器,打开一个 channel;
  • 客户端声明一个 exchange,并设置相关属性;
  • 客户端声明一个 queue,并设置相关属性;
  • 客户端使用 routing key,在 exchange 和 queue 之间建立好绑定关系;
  • 客户端投递消息到 exchange,exchange 接收到消息后,就根据消息的 key 和已经设置的 binding,进行消息路由,将消息投递到一个或多个队列里。

如上图所示:AMQP 里主要说两个组件,Exchange 和 Queue。绿色的X就是 Exchange ,红色的是 Queue ,这两者都在 Server 端,又称作 Broker,这部分是 RabbitMQ 实现的,而蓝色的则是客户端,通常有 Producer 和 Consumer 两种类型。

如上图所示:AMQP 里主要说两个组件,Exchange 和 Queue。绿色的X就是 Exchange ,红色的是 Queue ,这两者都在 Server 端,又称作 Broker,这部分是 RabbitMQ 实现的,而蓝色的则是客户端,通常有 Producer 和 Consumer 两种类型。

几个概念

  • P: 为 Producer,数据的发送方;
  • C:为 Consumer,数据的接收方;
  • Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列;
  • Queue:消息队列载体,每个消息都会被投入到一个或多个队列;
  • Binding:绑定,它的作用就是把 exchange 和 queue 按照路由规则绑定起来;
  • Routing Key:路由关键字,exchange 根据这个关键字进行消息投递;
  • vhost:虚拟主机,一个 broker 里可以开设多个 vhost,用作不同用户的权限分离;
  • channel:消息通道,在客户端的每个连接里,可建立多个 channel,每个 channel 代表一个会话任务。

属性说明

spring cloud 通用的绑定配置和属性,请看 Spring Cloud Stream说明文档

Binder属性

默认情况下,RabbitMQ的binder使用Spring Boot的ConnectionFactory。因此,它支持Spring Boot所有的RabbitMQ配置。这些配置都以spring.rabbitmq开头(详见Spring Boot说明文档)。

除了Spring Boot的属性,binder还有一些附加的属性:

spring.cloud.stream.rabbit.binder.adminAddresses

配置rabbitmq的管理页面地址,有多个时以逗号分隔;且必须与spring.rabbitmq.addresses一一对应。当你使用的是RabbitMQ集群时,该属性用于定位队列所在的节点,提高效率。更多说明请看Queue Affinity and the LocalizedQueueConnectionFactory
默认值:空。

注意:
如果有exclusive队列(没指定group),不要配置这个属性,否则会报错。

spring.cloud.stream.rabbit.binder.nodes
RabbitMQ的节点列表,以逗号分隔。与管理页面的node列表一致。当你使用的是RabbitMQ集群时,该属性用于定位队列所在的节点,提高效率。更多说明请看Queue Affinity and the LocalizedQueueConnectionFactory

注意:
如果有exclusive队列(没指定group),不要配置这个属性,否则会报错。

例子:

# RabbitMQ properties
spring:
  rabbitmq:
   addresses: rmq-node1:5672,rmq-node2:5672
   username: guest
   password: guest
   virtual_host: /
   ssl:
     enable: false
     keyStore:
     keyStorePassphrase:
     trustStore:
     trustStorePassphrase:
   channelCacheSize: 100
   cloud:
    stream:
      rabbit:
        binder:
          admin-addresses: http://rmq-node1:15672,http://rmq-node2:15672
          nodes: rabbit@rmq-node1,rabbit@rmq-node2

spring.cloud.stream.rabbit.binder.compressionLevel
压缩绑定的压缩级别。见java.util.zip.Deflater。
默认值:1(BEST_LEVEL)。

spring.cloud.stream.binder.connection-name-prefix
客户端连接名前缀。前缀后会加上一个数字,每次建立连接时会+1。
默认值: none (Spring AMQP default).

消费者属性

下面的属性都必须添加前缀:
spring.cloud.stream.rabbit.bindings.<channelName>.consumer.

对于绑定的默认设置,可以这么配置:
spring.cloud.stream.rabbit.default.<property>=<value>

具体的配置会覆盖默认配置。

acknowledgeMode

确认模式。

默认值:AUTO。

anonymousGroupPrefix

如果绑定没有指定group属性,会创建一个自动删除的队列,绑定到目标exchange。该队列的默认命名策略为anonymous.<base64 representation of a UUID>。通过这个属性可以修改缀。
默认值: anonymous.

spring cloud有自己的默认值。

autoBindDlq

是否自动声明DLQ并将其绑定到绑定器DLX。

默认值:false。

bindingRoutingKey

将队列绑定到交换机的路由密钥(如果bindQueue为true)。可以设置多个值,分隔符通过bindingRoutingKeyDelimiter属性设置。对于分区的destination,会给每个密钥加上-<instanceIndex>

默认值:#。

bindingRoutingKeyDelimiter

如果bindingRoutingKey有多个时,通常设置为逗号。
默认值: null.

bindQueue

是否声明队列并绑定到目的地交换机。如果您先前已经创建/绑定了队列,请设置为false。

默认值:true。

consumerTagPrefix

用于创建消费者的tag。后面会跟上一个数据,消息者每次创建都会+1。
例子:
${spring.application.name}-${spring.cloud.stream.bindings.input.group}-${spring.cloud.stream.instance-index}.

默认埴: none - 创建一个随机tag

containerType

指定listener的容器类型。更多说明请看Spring AMQP文档

默认值: simple

deadLetterQueueName

列信队列的名称。

默认值: prefix+destination.dlq

deadLetterExchange

死信队列的exchange名称. 需要autoBindDlq 为 true.

默认值: ‘prefix+DLX’

deadLetterExchangeType

死信队列的exchange的类型。需要autoBindDlq 为 true.

默认值: ‘direct’

deadLetterRoutingKey

死信队列的路由key。需要autoBindDlq 为 true.

默认值: destination

declareDlx

是否为destination声明死信exchange。需要autoBindDlq 为 true.
默认值: true.

declareExchange

是否为destination声明exchange。

默认值: true.

delayedExchange

是否将exchange 声明为Delayed Message Exchange - 需要在代理上安装延迟的消息exchange插件。x-delayed-type参数设置为exchangeType。

默认值:false。

dlqBindingArguments

死信队列绑定到exchange时,添加参数。
默认值:空。

dlqDeadLetterExchange

如果DLQ被声明,则将DLX分配给该队列

默认值:none

dlqDeadLetterRoutingKey

如果DLQ被声明,则会将一个死信路由密钥分配给该队列;

默认值:none

dlqExpires

未使用的死信队列被删除多久(ms)

默认值:no expiration

dlqLazy

使用x-queue-mode=lazy声明队列,详见"Lazy Queues"。建议使用policy代替这个参数。

将队列设置为延迟模式,在磁盘上保留尽可能多的消息,以减少RAM的使用;如果未设置,队列将保留内存缓存以尽可能快地传递消息;

默认值: false.

dlqMaxLength

死信队列中的最大消息数

默认值:no limit

dlqMaxLengthBytes

死信队列中的所有消息的最大字节数总和

默认值:no limit

dlqMaxPriority

死信队列中消息的最大优先级(0-255)
队列要支持的最大优先级数;如果未设置,队列将不支持消息优先级;
默认值:none

dlqOverflowBehavior

dlqMaxLengthdlqMaxLengthBytes被超过时所采取的操作。可选值drop-headreject-publish

默认值:none

dlqQuorum.enabled

如果为true,创建quorum类型的死信队列。
quorum机制指,集群中,只要大部分的镜像更新成功,则表示更新成功。是强一致的一种优化。

默认值:false。

dlqQuorum.deliveryLimit

dlqQuorum.enabled=true时,消息投递入死信队列的次数限制。需要同时设置requiredGroups属性。

默认值: none - 由broker 决定

dlqQuorum.initialQuorumSize

dlqQuorum.enabled=true时,初始quorum值,需要同时设置requiredGroups属性。

默认值: none - 由broker 决定

dlqSingleActiveConsumer

只允许一个活跃的消费者,同x-single-active-consumer属性。需要同时设置requiredGroups属性。

默认值:false。

dlqTtl

死信的生存时间(ms)。需要同时设置requiredGroups属性。

默认值:no limit

exchangeAutoDelete

如果为true,当exchange的队列都销毁时,自动删除该exchange。

默认值: true.

exchangeDurable

exchange是否持久化。

默认值: true.

exchangeType

exchange类型。
非分布式:direct, fanout, headers , topic
分布式:direct, headers , topic

默认值: topic.

expires

队列不再使用时,多久会被删除(ms)。需要同时设置requiredGroups属性。

默认值: no expiration

headerPatterns

出去的消息要带上的header。

默认值: [’*’] (所有).

lazy

将队列设置为延迟模式,在磁盘上保留尽可能多的消息,以减少RAM的使用;如果未设置,队列将保留内存缓存以尽可能快地传递消息;

使用x-queue-mode=lazy声明队列,详见"Lazy Queues"。建议使用policy代替这个参数,修改时不需要删除队列。需要同时设置requiredGroups属性。

默认值: false.

maxConcurrency

最大并行消费者。containerType 为 direct不生效。

默认填:1

maxLength

队列的最大消息数量。
默认值:no limit

maxLengthBytes

队列中的所有消息的最大字节数总和

默认值:no limit

maxPriority

队列中消息的最大优先级(0-255)
队列要支持的最大优先级数;如果未设置,队列将不支持消息优先级;
默认值:none

missingQueuesFatal

队列找不到时,是否停止listner。默认是false,继续尝试消费。
默认值: false.

overflowBehavior

dlqMaxLengthdlqMaxLengthBytes被超过时所采取的操作。可选值drop-headreject-publish

默认值:none

prefetch

预先获取的数量

默认值:1

prefix

destination 和 queue的前缀。

默认值:""

queueBindingArguments

队列绑定到exchange时,添加参数。
默认值:空。

queueNameGroupOnly

只使用group的名字作为队列的名字,否则是destination.group。当使用已经有的队列消费时,这个属性会有用。

默认值:false

quorum.enabled

如果为true,创建quorum类型的队列。

默认值:false。

quorum.deliveryLimit

quorum.enabled=true时,消息投递失败的重试次数限制。需要同时设置requiredGroups属性。

默认值: none - 由broker 决定

quorum.initialQuorumSize

quorum.enabled=true时,初始quorum值。

默认值: none - 由broker 决定

recoveryInterval

连接失败重试的间隔,ms。

默认值:5000

requeueRejected

当禁止重试 或 republishToDlq = false时,投递失败时是否重新入列。

默认值:false

republishDeliveryMode

当republishToDlq=true时,重新投递消息时使用的模式。

默认值:DeliveryMode.PERSISTENT

republishToDlq

默认的情况下,投递失败的消息在超过重试次数后会被拒绝。如果配置了死信队列,此属性为false时,失败的消息会原样发送的死信队列,并带上x-death头;如果这个属性为true,消息会在header中带上异常信息,没有x-death头。
默认值:true

singleActiveConsumer

表示队列是否是单一活动消费者,true时,注册的消费组内只有一个消费者消费消息,其他被忽略,false时消息循环分发给所有消费者
默认值:false

transacted

是否使用事务
默认值:false

ttl

队列的生存时间(ms)。
默认值:no limit

txSize

两次确认之间的投递数。
默认值:1

生产者属性

下面的属性都必须添加前缀:
spring.cloud.stream.rabbit.bindings.<channelName>.producer.

对于绑定的默认设置,可以这么配置:
spring.cloud.stream.rabbit.default.<property>=<value>

具体的配置会覆盖默认配置。

autoBindDlq

是否自动声明并绑定死信队列。
默认值:false

batchingEnabled

是否启用批量消息功能。

batchSize

批量消息数量。
默认值:100

batchBufferLimit

批量消息缓存大小

默许值:10000

batchTimeout

批处理超时时间。
默认值:5000

bindingRoutingKey

路由key,可以配置多个。如果是分布式destination,每个key后会加上-n。需要同时配置requiredGroups属性。

默认值:#

bindingRoutingKeyDelimiter

路由key的分隔符。需要同时配置requiredGroups属性。
默认值:null

bindQueue

是否声明并绑定队列。需要同时配置requiredGroups属性。
默认值:true

compress

发送消息时是否压缩。
默认值:false

confirmAckChannel

如果errorChannelEnabled=true,一个channel来发送投递结果。如果channel不存在,则会新注册一个DirectChannel,名称为这个属性值。 Connection factory 必须开启发布确认功能。
useConfirmHeader属性不能同时设置。

默认值:nullChannel(确认消息会被忽略)

deadLetterQueueName

死信队列名称,需要同时配置requiredGroups属性。

默认值: prefix+destination.dlq

deadLetterExchange

队列的DLX,autoBindDlq必须为true,需要同时配置requiredGroups属性。

默认值: ‘prefix+DLX’

deadLetterExchangeType

队列的DLX类型,autoBindDlq必须为true,需要同时配置requiredGroups属性。

默认值: ‘direct’

deadLetterRoutingKey

队列的DLX路由key,autoBindDlq必须为true,需要同时配置requiredGroups属性。

默认值:destination

declareDlx

是否声明dlx。autoBindDlq必须为true,需要同时配置requiredGroups属性。

默认值:false

declareExchange

是否声明exchange

默认值:true

delayedExchange

是否是延迟exchange。

默认值:false

delayExpression

消息的 延迟值,SpEL表达式,

默认值:无

deliveryMode

消息投递模式。

默认值:PERSISTENT

dlqBindingArguments

死信队列绑定到exchange时要带的参数。

默认值: 空

dlqDeadLetterExchange

DLQ的DLX。需要同时配置requiredGroups属性。

默认值:none

dlqDeadLetterRoutingKey

DLQ的路由key。需要同时配置requiredGroups属性。

dlqExpires

未使用的死信队列被删除多久(ms)。需要同时配置requiredGroups属性。

默认值:no expiration

dlqLazy

使用x-queue-mode=lazy声明队列,详见"Lazy Queues"。建议使用policy代替这个参数。

将队列设置为延迟模式,在磁盘上保留尽可能多的消息,以减少RAM的使用;如果未设置,队列将保留内存缓存以尽可能快地传递消息;

需要同时配置requiredGroups属性。

默认值: false.

###dlqMaxLength

死信队列中的最大消息数
需要同时配置requiredGroups属性。

默认值:no limit

dlqMaxLengthBytes

死信队列中的所有消息的最大字节数总和

需要同时配置requiredGroups属性。

默认值:no limit

dlqMaxPriority

死信队列中消息的最大优先级(0-255)
队列要支持的最大优先级数;如果未设置,队列将不支持消息优先级;

需要同时配置requiredGroups属性。

默认值:none

dlqQuorum.enabled

如果为true,创建quorum类型的死信队列。
quorum机制指,集群中,只要大部分的镜像更新成功,则表示更新成功。是强一致的一种优化。

默认值:false。

dlqQuorum.deliveryLimit

dlqQuorum.enabled=true时,消息投递入死信队列失败的次数限制。需要同时设置requiredGroups属性。

默认值: none - 由broker 决定

dlqQuorum.initialQuorumSize

dlqQuorum.enabled=true时,初始quorum值,需要同时设置requiredGroups属性。

默认值: none - 由broker 决定

dlqSingleActiveConsumer

只允许一个活跃的消费者,同x-single-active-consumer属性。需要同时设置requiredGroups属性。

默认值:false。

dlqTtl

死信的生存时间(ms)。需要同时设置requiredGroups属性。

默认值:no limit

exchangeAutoDelete

如果为true,当exchange的队列都销毁时,自动删除该exchange。

默认值: true.

exchangeDurable

当declareExchange 为true时,创建的exchange是否是持久化的(重启不消失)。

默认值: true.

exchangeType

exchange类型。
非分布式:direct, fanout, headers , topic
分布式:direct, headers , topic

默认值: topic.

expires

默认值: no expiration

队列不再使用时,多久会被删除(ms)。需要同时设置requiredGroups属性。

headerPatterns

出去的消息要带上的header。

默认值: [’*’] (所有).

lazy

将队列设置为延迟模式,在磁盘上保留尽可能多的消息,以减少RAM的使用;如果未设置,队列将保留内存缓存以尽可能快地传递消息;

使用x-queue-mode=lazy声明队列,详见"Lazy Queues"。建议使用policy代替这个参数,修改时不需要删除队列。需要同时设置requiredGroups属性。

默认值: false.

maxLength

队列的最大消息数量。
默认值:no limit

maxLengthBytes

队列中的所有消息的最大字节数总和

默认值:no limit

maxPriority

队列中消息的最大优先级(0-255)
队列要支持的最大优先级数;如果未设置,队列将不支持消息优先级;
默认值:none

prefix

exchange名称的前缀。

默认值:"".

queueBindingArguments

队列绑定到exchange时,添加参数。
默认值:空。

queueNameGroupOnly

只使用group的名字作为队列的名字,否则是destination.group。当使用已经有的队列消费时,这个属性会有用。

默认值:false

quorum.enabled

如果为true,创建quorum类型的队列。

默认值:false。

quorum.deliveryLimit

quorum.enabled=true时,消息投递失败的重试次数限制。需要同时设置requiredGroups属性。

默认值: none - 由broker 决定

quorum.initialQuorumSize

quorum.enabled=true时,初始quorum值。

默认值: none - 由broker 决定

routingKeyExpression

使用一个SpEL表达式,指定发布的消息使用哪个路由key。如果是固定的key,在properties 文件中配置routingKeyExpression='my.routingKey';在yaml文件中则是routingKeyExpression: '''my.routingKey'''

默认值: destination,分布式环境是destination-< partition >

singleActiveConsumer

只允许一个活跃的消费者,同x-single-active-consumer属性。需要同时设置requiredGroups属性。

默认值:false。

transacted

是否使用事务

默认值:false。

ttl

队列的生存时间(ms)。
默认值:no limit

useConfirmHeader

发送成功确认。与confirmAckChannel互斥。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiegwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值