RabbitMQ-Queue
主要讨论队列声明的各个参数(本文基于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)
name: 队列名称。
durable: 队列是否持久化。 队列默认是存放到内存中的,rabbitmq重启则丢失,若想重启之后还存在则队列要持久化,保存到Erlang自带的Mnesia数据库中,当rabbitmq重启之后会读取该数据库
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的话用于一个队列只能有一个消费者来消费的场景autoDelete:是否自动删除,当最后一个消费者断开连接之后队列是否自动被删除,可以通过RabbitMQ Management,查看某个队列的消费者数量,当consumers = 0时队列就会自动删除
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相关推荐
- Celery多个定时任务使用RabbitMQ,Queue冲突解决
Celery多个定时任务使用RabbitMQ,Queue冲突解决 一. 场景描述 使用celery实现定时任务后,任务会被定时添加到后端指定的队列里,队列可以是RabbitMQ,也可以是redis. ...
- RabbitMq queue异常导致consumer停止
偶发性rabbitmq出问题或者认为操作错误,访问不了queue,导致消费端停止消费 org.springframework.amqp.rabbit.listener.QueuesNotAvailab ...
- RabbitMQ队列监控
Idle:通过自动发现队列,获取各个队列中的ready,unackd等值 sudo !!! 1 #!/bin/sh 2 discovery(){ 3 Queue=(`rabbitmqctl list_ ...
- RabbitMQ消息发送和接收
1.RabbitMQ的消息发送和接受机制 所有 MQ 产品从模型抽象上来说都是一样的过程: 消费者(consumer)订阅某个队列.生产者(producer)创建消息,然后发布到队列(queue)中, ...
- kafka学习_《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 RabbitMQ
前言 之前有文章 <从0到1学习Flink>-- Flink 写入数据到 Kafka 写过 Flink 将处理后的数据后发到 Kafka 消息队列中去,当然我们常用的消息队列可不止这一种, ...
- Spring Cloud sleuth with zipkin over RabbitMQ教程
文章目录 Spring Cloud sleuth with zipkin over RabbitMQ demo zipkin server的搭建(基于mysql和rabbitMQ) 客户端环境的依赖 ...
- rabbitmq取消自动重连_rabbitmq客户端自动重连
编程rookie, 如有错误请指出 ☞: 253065903@qq.com RabbitMQ Node.js 客户端( AMQP 0-9-1 V0.5.2 )自动重连 重启策略 开始找解决方案: 通过 ...
- scala akka_使用Scala,Play和Akka连接到RabbitMQ(AMQP)
scala akka 在本文中,我们将研究如何从Scala连接到RabbitMQ,以便可以从应用程序中支持AMQP协议. 在此示例中,我将使用Play Framework 2.0作为容器(有关更多信息 ...
- 使用Scala,Play和Akka连接到RabbitMQ(AMQP)
在本文中,我们将研究如何从Scala连接到RabbitMQ,以便可以从应用程序中支持AMQP协议. 在此示例中,我将使用Play Framework 2.0作为容器(有关更多信息,请参阅我在该主题上的 ...
- rabbit和mysql事务_分布式事务原理及SpringBoot整合RabbitMQ实现可靠事件,TCC事务模型及接口幂等性...
分布式事务 我们知道在单数据库系统中,实现数据的一致性,通过数据库的事务来处理比较简单.在微服务或分布式系统中,各个独立的服务都会有自己的数据库,而不是在同一个数据库中,所以当一组事务(如商品交易中, ...
最新文章
- topcoder srm 635 div1
- 【Android】 -- 使用UncaughtExceptionHandler捕捉全局异常
- Arrays对数组,二分查找,冒泡排序
- java json 修改字段_我们如何使用Java中的Jackson来更改JSON中的字段名称?
- TopFreeTheme精选免费模板【20130617】
- 【报告分享】2020-2021虎嗅洞察报告:聚焦私域流量,洞察增长变局.pdf(附下载链接)...
- C语言基础教程之递归
- 过滤代码中的html标签
- NAACL 2018 | 最佳论文:艾伦人工智能研究所提出新型深度语境化词表征
- HBASE元数据及数据读取过程
- win11改成win7界面的设置方法
- 人人都可以成为记忆高手--罗马室记忆法则
- 微信小游戏排行榜制作(主域子域)
- 咳咳,好久没发博客了,我还活着。(ps:又要进入鸽王模式了)
- Shell脚本——免交互
- 国内有哪些好的刷题网站?
- 发送到桌面快捷方式没有了如何解决?
- Python | 输入逗号分隔的元素,转换为列表并打印
- 田忌赛马 贪心 注意细节
- 软件测试——基础练习(期末复习)