10. 持久化及@Queue、**@RabbitListener** 、@Exchange属性介绍

持久化及@Queue、@RabbitListener 、@Exchange属性介绍

@RabbitListener(
    bindings = @QueueBinding(
        value = @Queue(value = RabbitMqConstant.QUEUE_LASTING_QUEUE,durable = "true"),
        exchange = @Exchange(value = RabbitMqConstant.EXCHANGE_LASTING_CHANGE,
                             type = ExchangeTypes.TOPIC,durable = "true"),
        key = RabbitMqConstant.ROUTING_DEFAULT),
    ackMode = "MANUAL")

队列持久化配置在@Queue中配置durable = "true"就可以了,交换机持久化配置在@Exchange中配置durable = "true"就可以了(交换机默认就是True)

@Queue注解为我们提供了队列相关的一些属性,具体如下:

  • name: 队列的名称;
  • durable: 是否持久化;
  • exclusive: 是否独享、排外的;
  • autoDelete: 是否自动删除;
  • arguments:队列的其他属性参数,有如下可选项,可参看图2的arguments:
    • x-message-ttl:消息的过期时间,单位:毫秒;
    • x-expires:队列过期时间,队列在多长时间未被访问将被删除,单位:毫秒;
    • x-max-length:队列最大长度,超过该最大值,则将从队列头部开始删除消息;
    • x-max-length-bytes:队列消息内容占用最大空间,受限于内存大小,超过该阈值则从队列头部开始删除消息;
    • x-overflow:设置队列溢出行为。这决定了当达到队列的最大长度时消息会发生什么。有效值是drop-head、reject-publish或reject-publish-dlx。仲裁队列类型仅支持drop-head;
    • x-dead-letter-exchange:死信交换器名称,过期或被删除(因队列长度超长或因空间超出阈值)的消息可指定发送到该交换器中;
    • x-dead-letter-routing-key:死信消息路由键,在消息发送到死信交换器时会使用该路由键,如果不设置,则使用消息的原来的路由键值
    • x-single-active-consumer:表示队列是否是单一活动消费者,true时,注册的消费组内只有一个消费者消费消息,其他被忽略,false时消息循环分发给所有消费者(默认false)
    • x-max-priority:队列要支持的最大优先级数;如果未设置,队列将不支持消息优先级;
    • x-queue-mode(Lazy mode):将队列设置为延迟模式,在磁盘上保留尽可能多的消息,以减少RAM的使用;如果未设置,队列将保留内存缓存以尽可能快地传递消息;
    • x-queue-master-locator:在集群模式下设置镜像队列的主节点信息。

@RabbitListener 提供消费者配置如下:

  • ackMode:覆盖容器工厂 AcknowledgeMode属性。
  • admin:参考AmqpAdmin.
  • autoStartup:设置为 true 或 false,以覆盖容器工厂中的默认设置。
  • QueueBinding[] bindings:QueueBinding提供监听器队列名称以及交换和可选绑定信息的数组。
  • concurrency:消费并发数。
  • containerFactory:RabbitListenerContainerFactory的bean名称 ,没有则使用默认工厂。
  • converterWinsContentType:设置为“false”以使用“replyContentType”属性的值覆盖由消息转换器设置的任何内容类型标头。
  • errorHandler:消息异常时调用的方法名。
  • exclusive:当为true时,容器中的单个消费者将独占使用 queues(),从而阻止其他消费者从队列接收消息。
  • executor:线程池bean的名称
  • group:如果提供,则此侦听器的侦听器容器将添加到以该值作为其名称的类型为 的 bean 中Collection。
  • id:为此端点管理的容器的唯一标识符。
  • messageConverter:消息转换器。
  • priority:此端点的优先级。
  • String[] queues:监听的队列名称
  • Queue[] queuesToDeclare:监听的队列Queue注解对象,与bindings()、queues()互斥。
  • replyContentType:用于设置回复消息的内容类型。
  • replyPostProcessor:在ReplyPostProcessor发送之前处理响应的 bean 名称 。
  • returnExceptions:设置为“true”以导致使用正常replyTo/@SendTo语义将侦听器抛出的异常发送给发送者。

@Exchange 提供交换机配置配置如下:

  • value(): 这是一个用来指定交换机(Exchange)名称的元素。可以通过 @Exchange("exchangeName") 这样的方式来指定名称。
  • name(): 这也是用来指定交换机名称的元素,与 value() 元素同义。这个元素在版本 2.0 之后引入,可以通过 @Exchange(name = "exchangeName") 这样的方式来指定名称。
  • type(): 用来指定交换机的类型,包括自定义类型。默认为 ExchangeTypes.DIRECT,即直接交换机。如果使用自定义的交换机类型,需要在消息代理(broker)上安装相应的插件。
  • durable(): 如果设置为 false,表示交换机是非持久化的。
  • autoDelete(): 如果设置为 true,表示当没有连接到这个交换机的队列或者交换机时,会自动删除该交换机。
  • internal(): 如果设置为 true,表示这个交换机是一个内部交换机。
  • ignoreDeclarationExceptions(): 如果设置为 true,表示在声明交换机时忽略声明时可能出现的异常。
  • delayed(): 如果设置为 true,表示这个交换机是一个延迟消息交换机,需要在消息代理上安装延迟消息交换机插件。
  • arguments(): 用来指定在声明交换机时应用的参数。
  • declare(): 如果设置为 true,表示如果存在管理者(admin),则管理者会声明这个组件。
  • admins(): 返回应该声明这个组件的管理者 bean 的列表。

  • 23
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值