天天看點

RabbitMQ(四):RabbitMQ-queueDeclare

轉載位址:https://www.jianshu.com/p/5634a9c71559

聲明建立隊列

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,排他。如果一個隊列聲明為排他隊列,該隊列公對首次聲明它的連接配接可見,并在連接配接斷開時自動删除,

排序是基于連接配接的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;
           

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