主要讨论队列声明的各个参数(本文基于SpringBoot集成)

1.通过RabbitMQ-Manager界面添加queue设置参数

2.通过Bena注入添加queue设置参数

@Configuration
public class RabbitmqConfig {@Beanpublic Queue queueWork_test() {return new Queue("queue_work_test", true, false, false, null);}
}

3.详解queue的各个参数

Queue(String name, boolean durable,boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
  1. name: 队列名称。

  2. durable: 队列是否持久化。 队列默认是存放到内存中的,rabbitmq重启则丢失,若想重启之后还存在则队列要持久化,保存到Erlang自带的Mnesia数据库中,当rabbitmq重启之后会读取该数据库

  3. exclusive:是否排他的队列。有两个作用,
    一: 当连接关闭时connection.close()该队列是否会自动删除;
    二:设置队列是否是私有的,如果非排他(false)的,可以使用两个消费者都访问同一个队列,没有任何问题,如果是排他的,会对当前队列加锁,其他通道channel是不能访问的,如果强制访问会报异常:com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=405, reply-text=RESOURCE_LOCKED - cannot obtain exclusive access to locked queue ‘queue_name’ in vhost ‘/’, class-id=50, method-id=20)一般等于true的话用于一个队列只能有一个消费者来消费的场景

  4. autoDelete:是否自动删除,当最后一个消费者断开连接之后队列是否自动被删除,可以通过RabbitMQ Management,查看某个队列的消费者数量,当consumers = 0时队列就会自动删除

  5. arguments: 队列中的消息什么时候会自动被删除 (设置死信交换器和死信队列等设置)
    一:Message TTL(x-message-ttl):设置队列中的所有消息的生存周期(统一为整个队列的所有消息设置生命周期), 也可以在发布消息的时候单独为某个消息指定剩余生存时间,单位毫秒, 类似于redis中的ttl,生存时间到了,消息会被从队里中删除,注意是消息被删除,而不是队列被删除, 特性Features=TTL, 单独为某条消息设置过期时间AMQP.BasicProperties.Builder properties = new AMQP.BasicProperties().builder().expiration(“6000”);
    channel.basicPublish(EXCHANGE_NAME, “”, properties.build(), message.getBytes(“UTF-8”));
    二:Auto Expire(x-expires): 当队列在指定的时间没有被访问(consume, basicGet, queueDeclare…)就会被删除,Features=Exp
    三:Max Length(x-max-length): 限定队列的消息的最大值长度,超过指定长度将会把最早的几条删除掉, 类似于mongodb中的固定集合,例如保存最新的100条消息, Feature=Lim
    四:Max Length Bytes(x-max-length-bytes): 限定队列最大占用的空间大小, 一般受限于内存、磁盘的大小, Features=Lim B
    五:Dead letter exchange(x-dead-letter-exchange): 当队列消息长度大于最大长度、或者过期的等,将从队列中删除的消息推送到指定的交换机中去而不是丢弃掉,Features=DLX
    六:Dead letter routing key(x-dead-letter-routing-key):将删除的消息推送到指定交换机的指定路由键的队列中去, Feature=DLK
    七:Maximum priority(x-max-priority):优先级队列,声明队列时先定义最大优先级值(定义最大值一般不要太大),在发布消息的时候指定该消息的优先级, 优先级更高(数值更大的)的消息先被消费,
    八:Lazy mode(x-queue-mode=lazy): Lazy Queues: 先将消息保存到磁盘上,不放在内存中,当消费者开始消费的时候才加载到内存中
    Master locator(x-queue-master-locator)

4.避坑

1:IOC创建的queue不会启动就创建,而是出现消息投递才会创建
2:如果使用同一套参数进行声明了,就不能再使用其他参数来声明,必须删除同名队列,才能成功

RabbitMQ-Queue相关推荐

  1. Celery多个定时任务使用RabbitMQ,Queue冲突解决

    Celery多个定时任务使用RabbitMQ,Queue冲突解决 一. 场景描述 使用celery实现定时任务后,任务会被定时添加到后端指定的队列里,队列可以是RabbitMQ,也可以是redis. ...

  2. RabbitMq queue异常导致consumer停止

    偶发性rabbitmq出问题或者认为操作错误,访问不了queue,导致消费端停止消费 org.springframework.amqp.rabbit.listener.QueuesNotAvailab ...

  3. RabbitMQ队列监控

    Idle:通过自动发现队列,获取各个队列中的ready,unackd等值 sudo !!! 1 #!/bin/sh 2 discovery(){ 3 Queue=(`rabbitmqctl list_ ...

  4. RabbitMQ消息发送和接收

    1.RabbitMQ的消息发送和接受机制 所有 MQ 产品从模型抽象上来说都是一样的过程: 消费者(consumer)订阅某个队列.生产者(producer)创建消息,然后发布到队列(queue)中, ...

  5. kafka学习_《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 RabbitMQ

    前言 之前有文章 <从0到1学习Flink>-- Flink 写入数据到 Kafka 写过 Flink 将处理后的数据后发到 Kafka 消息队列中去,当然我们常用的消息队列可不止这一种, ...

  6. Spring Cloud sleuth with zipkin over RabbitMQ教程

    文章目录 Spring Cloud sleuth with zipkin over RabbitMQ demo zipkin server的搭建(基于mysql和rabbitMQ) 客户端环境的依赖 ...

  7. rabbitmq取消自动重连_rabbitmq客户端自动重连

    编程rookie, 如有错误请指出 ☞: 253065903@qq.com RabbitMQ Node.js 客户端( AMQP 0-9-1 V0.5.2 )自动重连 重启策略 开始找解决方案: 通过 ...

  8. scala akka_使用Scala,Play和Akka连接到RabbitMQ(AMQP)

    scala akka 在本文中,我们将研究如何从Scala连接到RabbitMQ,以便可以从应用程序中支持AMQP协议. 在此示例中,我将使用Play Framework 2.0作为容器(有关更多信息 ...

  9. 使用Scala,Play和Akka连接到RabbitMQ(AMQP)

    在本文中,我们将研究如何从Scala连接到RabbitMQ,以便可以从应用程序中支持AMQP协议. 在此示例中,我将使用Play Framework 2.0作为容器(有关更多信息,请参阅我在该主题上的 ...

  10. rabbit和mysql事务_分布式事务原理及SpringBoot整合RabbitMQ实现可靠事件,TCC事务模型及接口幂等性...

    分布式事务 我们知道在单数据库系统中,实现数据的一致性,通过数据库的事务来处理比较简单.在微服务或分布式系统中,各个独立的服务都会有自己的数据库,而不是在同一个数据库中,所以当一组事务(如商品交易中, ...

最新文章

  1. topcoder srm 635 div1
  2. 【Android】 -- 使用UncaughtExceptionHandler捕捉全局异常
  3. Arrays对数组,二分查找,冒泡排序
  4. java json 修改字段_我们如何使用Java中的Jackson来更改JSON中的字段名称?
  5. TopFreeTheme精选免费模板【20130617】
  6. 【报告分享】2020-2021虎嗅洞察报告:聚焦私域流量,洞察增长变局.pdf(附下载链接)...
  7. C语言基础教程之递归
  8. 过滤代码中的html标签
  9. NAACL 2018 | 最佳论文:艾伦人工智能研究所提出新型深度语境化词表征
  10. HBASE元数据及数据读取过程
  11. win11改成win7界面的设置方法
  12. 人人都可以成为记忆高手--罗马室记忆法则
  13. 微信小游戏排行榜制作(主域子域)
  14. 咳咳,好久没发博客了,我还活着。(ps:又要进入鸽王模式了)
  15. Shell脚本——免交互
  16. 国内有哪些好的刷题网站?
  17. 发送到桌面快捷方式没有了如何解决?
  18. Python | 输入逗号分隔的元素,转换为列表并打印
  19. 田忌赛马 贪心 注意细节
  20. 软件测试——基础练习(期末复习)

热门文章

  1. 粉姐个人单曲《0度的死角》发行 个人IP打造咨询师惊喜跨界音乐
  2. jave与python区别_简述JAVA后端开发与python后端开发的区别
  3. 华清远见2022018班作业
  4. 立波硬件检测:安卓手机硬件信息详细检测
  5. 如何使用免费的文字图标
  6. Rose与PowerDesigner:两款建模工具的对比
  7. Ubuntu创建文件/目录和vim
  8. @OneToMany级联删除
  9. Raft 协议原理详解,10 分钟带你掌握
  10. 两个发音非常相近但意思根本不同的单词: Quota 和 Quarter