转自:http://www.cnblogs.com/rader/archive/2012/06/28/2567779.html

如果你想创建一个只有自己可见的队列,即不允许其它用户访问,RabbitMQ允许你将一个Queue声明成为排他性的(Exclusive Queue)。

该队列的特点是:

  1. 只对首次声明它的连接(Connection)可见
  2. 会在其连接断开的时候自动删除。

对于第一点,首先是强调首次声明,因为另外一个连接无法声明一个同样的排他性队列;其次是只区别连接(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相关推荐

  1. RabbitMQ 声明Queue时的参数们的Power

    RabbitMQ 声明Queue时的参数们的Power 参数们的Power 在声明队列的时候会有很多的参数 public static QueueDeclareOk QueueDeclare(this ...

  2. 【深入理解RabbitMQ】RabbitMQ exclusive和mandatory的理解

                                 RabbitMQ exclusive和mandatory的理解 exclusive 排他性 队列的排他性的理解,是针对首次建立连接的,一个连接 ...

  3. 【原创】RabbitMQ之Queue属性测试

    2019独角兽企业重金招聘Python工程师标准>>> 常用queue属性 在 rabbitmq-c代码中可以看到如下代码 上图所示为queue声明时使用的结构体.其中最容易让使用者 ...

  4. RabbitMQ的Queue详解;

    一.前言 Queue(队列)是RabbitMQ的内部对象,用于存储消息队列,并将它们转发给消费者: 二.Queue队列 队列跟交换机共享某些属性,但是队列也有一些另外的属性 Name:队列的名称 Du ...

  5. RabbitMq队列 queue

    目录 RabbitMq队列 消息确认机制 负载均衡 生产者代码 消费者1 消费者2 RabbitMq队列 在上篇文章中讲了mq的队列,这篇用代码实现.在例子中存在一个生产者,和两个消费者.生产者将生产 ...

  6. rabbitmq监控queue中message数量

    2019独角兽企业重金招聘Python工程师标准>>> 头儿让整一个jar包干这活,学了一下rabbitmq,但这东西中文文档很少,就认真读了读官方的英文文档.官方文档提供了两种方法 ...

  7. RabbitMQ Exchange Queue RoutingKey BindingKey解析

    许多新手在刚接触RabbitMQ的时候,会被各种名词弄晕,包括ConnectionFactory .Connection .Channel.Exchange.Queue.RoutingKey.Bind ...

  8. RabbitMQ——work queue

    工作队列 包含一个生产者和多个消费者的MQ.生产者发送消息非常轻松,消费者和业务结合,需要花费时间. 下面介绍一种轮询方式的工作队列: 首先定义生产者: public class Send {priv ...

  9. Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  10. RabbitMQ Java 基本API

    2019独角兽企业重金招聘Python工程师标准>>> API 一.exchangeDeclare 交换器声明 /*** Declare an exchange, via an in ...

最新文章

  1. 利用PHP实现定时任务,利用php 实现定时任务简单实现 代码
  2. cf776G.Sherlock and the Encrypted Data
  3. 史上最全GAN综述2020版:算法、理论及应用
  4. 浅谈电子政务门户建设选型经验
  5. 转从Qt4 到Qt5的变化
  6. 如何在 SAP 电商云 Spartacus UI 中创建新的页面
  7. LeetCode—207. 课程表
  8. fiber报错 (type *big.Int has no field or method FillBytes)
  9. Linux笔记-iptables规则原理和组成
  10. shell编程之进阶篇三常见命令详解
  11. python设计模式8-组合模式
  12. 11.11开启10分钟 达达承接的京东小时购首单已签收
  13. git的基本使用和多人协作合并管理
  14. 通过代码触发dropdownlist_SelectedIndexChanged事件。
  15. 乌班图 修改ip_unbuntu(乌班图)虚拟机修改ip地址NAT模式
  16. java信鸽推送_记录腾讯信鸽推送服务java
  17. R_leaflet包_最易上手地图教程(二)
  18. 什么是飞天?全球级大数据计算平台,自主研发!
  19. 面试后说hold什么意思_面试结束后就傻傻等通知?你还可以做这三件事!
  20. BeautifulSoup爬取豆瓣电影top250信息

热门文章

  1. PhotoScan Google照片扫描仪,让手机替代扫描仪
  2. linux服务器u盘启动项检测不到,u盘启动大师下载u盘安装kali linux 检测不到cd rom...
  3. 淘宝开放平台开发指南之熟悉API族
  4. 基于S12ZVM的无感FOC失步检测
  5. Angr 操作栈的符号执行 04_angr_symbolic_stack
  6. keil的sct文件_Keil sct分散加载文件
  7. CrownCAD二次开发,从中国结代码看代码简洁之美
  8. 基于php的校园公寓管理系统设计与实现
  9. 银屑病推荐益生菌摄入(持续更新中)
  10. 【技巧】arcgis制图设置经纬网同时置于最底层