本章节主要介绍Queue队列和消息Message的详细介绍。包含构建过程中各参数的详细解释,话不多说我们开始吧
在第一章 初识RabbitMQ 中我们简单介绍了Queue,Queue的主要是作用于存储消息;在之前的样例中大家应该能看到如何构建一个Queue,即queueDeclare方法
queueDeclare 有两个重载方法
Queue.DeclareOk queueDec1are() throws IOException;
第一种不带任何参数的queueDeclare 方法默认创建一个由RabbitMQ 命名的(类似这种amq.gen-LhQzlgv3GhDOv8PIDabOXA 名称,这种队列也称之为匿名队列〉、排他的、自动删除的、非持久化的队列。
Queue.DeclareOk queueDeclare (String queue , boolean durable , boolean exclusive,
boolean autoDelete, Map arguments) throws IOException;
第二种方法参数详解:
queue :队列的名称
durable :设置是否持久化。为true 则设置队列为持久化。持久化的队列会存盘,在服务器重启的时候可以保证不丢失相关信息
exclusive :设置是否排他(独占队列)。为true 则设置队列为排他的。如果一个队列被声明为排他队列,该队列仅对首次声明它的连接可见,并在连接断开时自动删除。这里需要注意三点:排他队列是基于连接( Connection) 可见的,同一个连接的不同信道(Channel)是可以同时访问同一连接创建的排他队列; "首次"是指如果一个连接己经声明了一个排他队列,其他连接是不允许建立同名的排他队列的,这个与普通队列不同:即使该队列是持久化的,一旦连接关闭或者客户端退出,该排他队列都会被自动删除,这种队列适用于一个客户端同时发送和读取消息的应用场景
autoDelete :设置是否自动删除,当最后一个监听被移除后,自动删除队列;也就是说至少有一个消费者连接到这个队列,之后所有与这个队列连接的消费者都断开时,才会自动删除
arguments :设置队列的一些其他参数;
在之前的代码样例种我们能看到queueBind这个方法,它的主要作用是将交换机和队列进行绑定;我们主要讲解其两个构造方法的参数详解
Queue.BindOk queueBind(String queue , String exchange , String routingKey)
Queue.BindOk queueBind(String queue , String exchange , String routingKey , Map arguments)
方法中涉及的参数详解:
同理既有绑定操作也必然有解绑操作,方法如下,参数和绑定都是一样的裂解,不再码字了~
Queue.BindOk queueUnBind(String queue , String exchange , String routingKey)
Queue.BindOk queueUnBind(String queue , String exchange , String routingKey , Map arguments)
它是服务器和应用程序间传输的数据,我们在前面的样例代码种可以看到发送消息的样例;Channel.basicPublish 方法,它有几个重载方法
(1) void basicPublish (String exchange , String routingKey, BasicProperties props ,byte[) body) throws IOException ;
(2) void basicPublish (String exchange , String routingKey, boolean mandatory, BasicProperties props ,byte[) body) throws IOException ;
(3) void basicPublish (String exchange , String routingKey, boolean mandatory, boolean immediate, BasicProperties props ,byte[) body) throws IOException ;
具体参数详细介绍如下:
接下来我们还是用一段代码来加深理解
public class MessageProducer {
public static void main(String[] args) throws Exception {
//1 创建ConnectionFactory
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("192.168.1.28");
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/");
connectionFactory.setUsername("toher");
connectionFactory.setPassword("toher888");
//2 创建Connection
Connection connection = connectionFactory.newConnection();
//3 创建Channel
Channel channel = connection.createChannel();
//4 声明
String routingKey = "test.direct";
//5 发送
Map headers = new HashMap<>();
headers.put("param1", "111");
headers.put("param1", "222");
AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
.deliveryMode(2) //设置持久化
.contentEncoding("UTF-8")
.expiration("10000") //设置10秒过期
.headers(headers) //传递自定义headers
.build();
String msg = "Test Message";
//exchangeName 为空 默认走RabbitMQ默认交换机
channel.basicPublish("", routingKey , properties , msg.getBytes());
channel.close();
connection.close();
}
}
本篇教程详细介绍了Queue队列和消息Message包含构建过程中各参数的详细解释,朋友们可以按照测试样例进行对应测试,感谢大家的支持~谢谢!
上一篇:RabbitMQ Exchange交换机的详细使用
下一篇:RabbitMQ可靠性投递生产者确认机制