rabbitmq-exclusive queue
转自:http://www.cnblogs.com/rader/archive/2012/06/28/2567779.html
如果你想创建一个只有自己可见的队列,即不允许其它用户访问,RabbitMQ允许你将一个Queue声明成为排他性的(Exclusive Queue)。
该队列的特点是:
- 只对首次声明它的连接(Connection)可见
- 会在其连接断开的时候自动删除。
对于第一点,首先是强调首次声明,因为另外一个连接无法声明一个同样的排他性队列;其次是只区别连接(Connection)而不是通道(Channel),从同一个连接创建的不同的通道可以同时访问某一个排他性的队列。这里说的连接是指一个AMQPConnection,以RabbitMQ的Java客户端为例:
Connection conn = factory.newConnection();
如果试图在一个不同的连接中重新声明或访问(如publish,consume)该排他性队列,会得到资源被锁定的错误:
ESOURCE_LOCKED - cannot obtain exclusive access to locked queue 'UserLogin2'
对于第二点,RabbitMQ会自动删除这个队列,而不管这个队列是否被声明成持久性的(Durable =true)。 也就是说即使客户端程序将一个排他性的队列声明成了Durable的,只要调用了连接的Close方法或者客户端程序退出了,RabbitMQ都会删除这个队列。注意这里是连接断开的时候,而不是通道断开。这个其实前一点保持一致,只区别连接而非通道。
下面是一段示例代码,演示了如何在同一连接的不同通道中访问排他性队列:
package rabbitmq.java.sample.exclusivequeue;import java.io.IOException;import com.rabbitmq.client.*; import com.rabbitmq.client.AMQP.Queue.DeclareOk;public class Producer {private final static String QUEUE_NAME = "UserLogin2";private final static String EXCHANGE_NAME = "user.login";/*** @param args*/public static void main(String[] args) {ConnectionFactory factory=new ConnectionFactory();factory.setHost("CNCDS108");try {Connection conn = factory.newConnection(); Channel channel =conn.createChannel();DeclareOk declareOk = channel.queueDeclare(QUEUE_NAME, true, true, false, null);channel.basicPublish("", QUEUE_NAME, null, "Hello".getBytes());//close the channel, check if the queue is deletedSystem.out.println("Try to close channel");channel.close();System.out.println("Channel closed");System.out.println("Create a new channel");Channel channel2 =conn.createChannel();DeclareOk declareOk2 = channel2.queueDeclarePassive(QUEUE_NAME);//we can access the exclusive queue from another channelSystem.out.println(declareOk2.getQueue()); //will output "UserLogin2"channel2.basicPublish("", QUEUE_NAME, null, "Hello2".getBytes());System.out.println("Message published through the new channel");// System.out.println("Try to close Connection"); // conn.close(); // System.out.println("Connection closed"); } catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();}}}
rabbitmq-exclusive queue相关推荐
- RabbitMQ 声明Queue时的参数们的Power
RabbitMQ 声明Queue时的参数们的Power 参数们的Power 在声明队列的时候会有很多的参数 public static QueueDeclareOk QueueDeclare(this ...
- 【深入理解RabbitMQ】RabbitMQ exclusive和mandatory的理解
RabbitMQ exclusive和mandatory的理解 exclusive 排他性 队列的排他性的理解,是针对首次建立连接的,一个连接 ...
- 【原创】RabbitMQ之Queue属性测试
2019独角兽企业重金招聘Python工程师标准>>> 常用queue属性 在 rabbitmq-c代码中可以看到如下代码 上图所示为queue声明时使用的结构体.其中最容易让使用者 ...
- RabbitMQ的Queue详解;
一.前言 Queue(队列)是RabbitMQ的内部对象,用于存储消息队列,并将它们转发给消费者: 二.Queue队列 队列跟交换机共享某些属性,但是队列也有一些另外的属性 Name:队列的名称 Du ...
- RabbitMq队列 queue
目录 RabbitMq队列 消息确认机制 负载均衡 生产者代码 消费者1 消费者2 RabbitMq队列 在上篇文章中讲了mq的队列,这篇用代码实现.在例子中存在一个生产者,和两个消费者.生产者将生产 ...
- rabbitmq监控queue中message数量
2019独角兽企业重金招聘Python工程师标准>>> 头儿让整一个jar包干这活,学了一下rabbitmq,但这东西中文文档很少,就认真读了读官方的英文文档.官方文档提供了两种方法 ...
- RabbitMQ Exchange Queue RoutingKey BindingKey解析
许多新手在刚接触RabbitMQ的时候,会被各种名词弄晕,包括ConnectionFactory .Connection .Channel.Exchange.Queue.RoutingKey.Bind ...
- RabbitMQ——work queue
工作队列 包含一个生产者和多个消费者的MQ.生产者发送消息非常轻松,消费者和业务结合,需要花费时间. 下面介绍一种轮询方式的工作队列: 首先定义生产者: public class Send {priv ...
- Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- RabbitMQ Java 基本API
2019独角兽企业重金招聘Python工程师标准>>> API 一.exchangeDeclare 交换器声明 /*** Declare an exchange, via an in ...
最新文章
- 利用PHP实现定时任务,利用php 实现定时任务简单实现 代码
- cf776G.Sherlock and the Encrypted Data
- 史上最全GAN综述2020版:算法、理论及应用
- 浅谈电子政务门户建设选型经验
- 转从Qt4 到Qt5的变化
- 如何在 SAP 电商云 Spartacus UI 中创建新的页面
- LeetCode—207. 课程表
- fiber报错 (type *big.Int has no field or method FillBytes)
- Linux笔记-iptables规则原理和组成
- shell编程之进阶篇三常见命令详解
- python设计模式8-组合模式
- 11.11开启10分钟 达达承接的京东小时购首单已签收
- git的基本使用和多人协作合并管理
- 通过代码触发dropdownlist_SelectedIndexChanged事件。
- 乌班图 修改ip_unbuntu(乌班图)虚拟机修改ip地址NAT模式
- java信鸽推送_记录腾讯信鸽推送服务java
- R_leaflet包_最易上手地图教程(二)
- 什么是飞天?全球级大数据计算平台,自主研发!
- 面试后说hold什么意思_面试结束后就傻傻等通知?你还可以做这三件事!
- BeautifulSoup爬取豆瓣电影top250信息
热门文章
- PhotoScan Google照片扫描仪,让手机替代扫描仪
- linux服务器u盘启动项检测不到,u盘启动大师下载u盘安装kali linux 检测不到cd rom...
- 淘宝开放平台开发指南之熟悉API族
- 基于S12ZVM的无感FOC失步检测
- Angr 操作栈的符号执行 04_angr_symbolic_stack
- keil的sct文件_Keil sct分散加载文件
- CrownCAD二次开发,从中国结代码看代码简洁之美
- 基于php的校园公寓管理系统设计与实现
- 银屑病推荐益生菌摄入(持续更新中)
- 【技巧】arcgis制图设置经纬网同时置于最底层