声明创建队列
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;
清空队列中的内容,但不删除队列本身
网友评论