美文网首页
RabbitMQ-queueDeclare

RabbitMQ-queueDeclare

作者: AmeeLove | 来源:发表于2018-04-02 10:06 被阅读997次

声明创建队列

 ConnectionFactory connectionFactory = new ConnectionFactory();
        /**
         * 设置ip
         * port
         * 用户名
         * 密码
         */
        connectionFactory.setHost(IP_ADDRESS);
        connectionFactory.setPort(PORT);
        connectionFactory.setUsername(USER_NAME);
        connectionFactory.setPassword(PASSWORD);
        
        /**
         * 创建连接
         */
        Connection connection = connectionFactory.newConnection();
        
        /**
         * 创建信道
         */
        Channel channel = connection.createChannel();
        
        /**
         * 创建一个type=direct 持久化的 非自动删除的交换器
         */
        
        channel.exchangeDeclare(EXCHANGE_NAME, "direct", true, false, null);
        /**
         * 创建一个持久化 百排他的 非自动删除的队列
         */
        channel.queueDeclare(QUEUR_NAME, true, false, false, null);

  
        /**
         * 将交换器与队列通过路由键绑定
         */
        
        channel.queueBind(QUEUR_NAME, EXCHANGE_NAME, ROUTING_KEY);
        /**
         * 发送一条持 久化消息
         */
        String message="Hello RabbitMq!";
        channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, MessageProperties.PERSISTENT_TEXT_PLAIN , message.getBytes());
        
        /**
         * 关闭资源
         */
        channel.close();
        connection.close();

queueDeclare方法

也有几个重载


 Queue.DeclareOk queueDeclare() throws IOException;

    Queue.DeclareOk queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete,
                                 Map<String, Object> arguments) throws IOException;

  • queueDeclare()不带参数方法默认创建一个由RabbitMq命名的(amq.gen-LHQZz...)
    名称,这种队列也称之为匿名队列,排他 的,自动删除的,非持久化的队列
  • queue:队列名称
  • durable: 是不持久化, true ,表示持久化,会存盘,服务器重启仍然存在,false,非持久化
  • exclusive : 是否排他的,true,排他。如果一个队列声明为排他队列,该队列公对首次声明它的连接可见,并在连接断开时自动删除,
  1. 排序是基于连接的Connection可见的,同一个连接的不同信道是可以同时访问同一个连接创建的排他队列,
    首次--是指如果一个连接已经声明了一个排他队列,其它连接是不允许建立同名的排他队列,这个与普通队列不同,即使该队列是持久化的,一旦连接关闭或者客户端退出,该排他队列都会被自动删除,这个队列适用于一个客户端同是发送和读取消息的应用场景
  • autoDelete :是否自动删除,true,自动删除,自动删除的前提:至少有一个消息者连接到这个队列,之后所有与这个队列连接的消息都断开时,才会自动删除,,
    备注:生产者客户端创建这个队列,或者没有消息者客户端连接这个队列时,不会自动删除这个队列

  • arguments:其它一些参数。如:x-message-ttl,之类

queueDeclareNoWait

void queueDeclareNoWait(String queue, boolean durable, boolean exclusive, boolean autoDelete,
                            Map<String, Object> arguments) throws IOException;

返回值是void,表示不需要服务端的任何返回,

queueDeclarePassive

Queue.DeclareOk queueDeclarePassive(String queue) throws IOException;

检测相应的队列是否存在,有就正常返回,不存在就抛出异常404 channel exception同时Channel也会被 关闭

queueDelete

Queue.DeleteOk queueDelete(String queue) throws IOExceptio

Queue.DeleteOk queueDelete(String queue, boolean ifUnused, boolean ifEmpty) throws IOException;


void queueDeleteNoWait(String queue, boolean ifUnused, boolean ifEmpty) throws IOException;
  • queue队列名
  • ifUnused同来设置是否在队列没有被使用的情况下删除,true,则只有在此队列没有被使用的情况下才删除,false,则无论如何这个队列都要被删除
  • ifEmpty设置为true,表示在队列为空,(列队中没有任何消息堆积)的情况下才删除

queuePurge 方法

Queue.PurgeOk queuePurge(String queue) throws IOException;

清空队列中的内容,但不删除队列本身

相关文章

  • RabbitMQ-queueDeclare

    声明创建队列 queueDeclare方法 也有几个重载 queueDeclare()不带参数方法默认创建一个由R...

网友评论

      本文标题:RabbitMQ-queueDeclare

      本文链接:https://www.haomeiwen.com/subject/nxjthftx.html