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;

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

 

猜你喜欢

转载自blog.csdn.net/weixin_40805079/article/details/85630981