美文网首页
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

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