> 文章列表 > 【RabbitMQ笔记09】消息队列RabbitMQ之常见方法的使用

【RabbitMQ笔记09】消息队列RabbitMQ之常见方法的使用

【RabbitMQ笔记09】消息队列RabbitMQ之常见方法的使用

这篇文章,主要介绍消息队列RabbitMQ之常见方法的使用。

目录

一、消息队列常见方法

1.1、连接工厂ConnectionFactory

1.2、连接Connection

1.3、通道Channel

1.4、交换机相关方法

(1)exchangeDeclare()声明交换机

1.5、队列相关方法

(1)queueDeclare()声明队列

(2)queueDelete()删除队列

(3)queuePurge()清空队列

(4)queueBind()队列绑定交换机

1.6、生产者相关方法

(1)confirmSelect()开启发布确认

(2)waitForConfirms()等待确认

(3)basicPublish()发布消息

1.7、消费者相关方法

(1)basicConsume()消费消息

(2)basicAck()手动确认

(3)basicQos()方法


一、消息队列常见方法

1.1、连接工厂ConnectionFactory

RabbitMQ中连接消息队列服务器,是通过ConnectionFactory连接工厂来统一管理所有的Connection连接请求的,创建连接对象的时候,可以指定需要连接的RabbitMQ的IP地址、端口号、虚拟主机、连接用户名、密码、连接超时时间、创建连接对象等等。

ConnectionFactory是RabbitMQ客户端提供的一个连接工厂类,通过该类可以获取到具体的Connection连接对象,下面看下

// 1、创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
// 2、设置连接的 RabbitMQ 服务地址
factory.setHost("127.0.0.1"); // 默认是【localhost】
factory.setPort(5672); // 默认就是 5672 端口
factory.setUsername("guest"); // 用户名,默认是【guest】
factory.setPassword("guest"); // 密码,默认是【guest】
factory.setVirtualHost("/demo"); // 设置虚拟主机地址,默认是【/】
factory.setConnectionTimeout(60000); // 连接超时时间,默认是【60】秒

1.2、连接Connection

创建连接工厂对象ConnectionFactory之后,就可以调用【newConnection()】方法,创建具体的一个Connection连接对象啦,该方法存在很多重载类型,如下所示:

一般情况下,调用无参方法就可以啦,注意:【newConnection()】方法会抛出两个异常,分别是:IOException和TimeoutException超时异常。

// 创建连接
Connection connection = factory.newConnection();

1.3、通道Channel

RabbitMQ规定,操作消息队列必须通过Channel通道来完成,一个Connection可以创建多个Channel通道,但是同一次操作过程中,只能使用相同的Channel,也就是说,假设:A通道发送了消息正在等待RabbitMQ确认,那么我们就不能使用B通道给A通道发送确认标识,这样将会抛出异常。

Channel通道是使用Connection连接对象来创建的,调用【createChannel()】方法即可,有两个重载形式,该方法会抛出一个IOException异常。

可以指定创建的通道数量,默认最大通道数量是2047个。

// 创建通道
Channel channel = connection.createChannel();

1.4、交换机相关方法

(1)exchangeDeclare()声明交换机

RabbitMQ客户端可以通过调用【exchangeDeclare()】方法声明一个Exchange交换机,这个方法作用:如果声明的交换机已经存在,则不会创建,如果交换机不存在,则创建Exchange交换机。

【exchangeDeclare()】方法有多个重载形式,该方法会抛出一个IOException异常,方法参数介绍:

  • exchange参数:指定Exchange交换机的名称。
  • type参数:指定Exchange交换机的类型,四种可选:direct、fanout、topic、headers。
    • 可以直接使用字符串,也可以使用枚举类BuiltinExchangeType,例如:BuiltinExchangeType.DIRECT。
  • durable参数:是否支持消息持久化,默认false。
  • autoDelete参数:当交换机不再被使用的时候,是否自动删除这个Exchange交换机,默认false。
  • arguments参数:传递给Exchange交换机的一些参数属性。
  • internal参数:设置Exchange交换机是否为内部使用,设置为true则表示不能被client客户端直接使用。
// 声明Exchange交换机
channel.exchangeDeclare("exchange名称", BuiltinExchangeType.DIRECT);

1.5、队列相关方法

(1)queueDeclare()声明队列

在消费者中,可以调用【queueDeclare()】方法声明一个Queue队列,该方法作用:如果指定的Queue队列不存在,则创建该队列,如果已经存在,则不会重新创建。

【queueDeclare()】方法有几个重载形式,该方法会抛出一个IOException异常,方法参数介绍:

  • queue参数:指定Queue队列名称。
  • durable参数:消息队列是否需要持久化。
  • exclusive参数:这个Queue队列是否只能够被当前这个Connection连接使用。
  • autoDelete参数:当Queue不再被使用的时候,是否自动删除这个Queue队列,默认false。
  • arguments参数:传递给Queue队列的一些参数属性。
// 声明对象
channel.queueDeclare("队列名称", false, false, false, null);

(2)queueDelete()删除队列

queueDelete()方法作用:删除指定的Queue消息队列。

(3)queuePurge()清空队列

queuePurge()方法作用:将指定的Queue队列清空。

// 清空队列
channel.queuePurge("队列名称");

(4)queueBind()队列绑定交换机

queueBind()方法作用:将指定的Queue队列和Exchange交换机按照给定的RoutingKey路由键进行绑定。

1.6、生产者相关方法

(1)confirmSelect()开启发布确认

confirmSelect()方法作用:生产者开启发布确认模式。

// 开启发布确认模式
channel.confirmSelect();

(2)waitForConfirms()等待确认

waitForConfirms()方法作用:等待RabbitMQ消息队列的ACK确认结果,RabbitMQ成功接收消息,则返回true。

(3)basicPublish()发布消息

basicPublish()方法作用:发送消息到RabbitMQ指定的交换机。

1.7、消费者相关方法

(1)basicConsume()消费消息

basicConsume()方法作用:消费RabbitMQ分发给消费者的消息。

当设置自动确认,RabbitMQ将消息分发给消费者时候,消费者就会自动返回ACK标识给RabbitMQ,此时就会将消息从队列中删除。basicConsume()方法的参数介绍:

  • queue参数:从哪个Queue队列消费消息。
  • autoAck参数:消费者是否开启自动确认,默认是false。

(2)basicAck()手动确认

basicAck()方法作用:消费者成功将消息消费之后,调用这个方法返回ACK标识给RabbitMQ。相反,如果消费失败,则可以调用【basicNack()】方法。

(3)basicQos()方法

basicQos()方法作用:限制RabbitMQ分发消息给消费者的数量。假设A消费者设置【basicQos(1)】,那么当A消费者这一条消息还没有消费完成,RabbitMQ将不会继续分发消息给A消费者。

到此,RabbitMQ消息队列中常见的方法就介绍完啦。

综上,这篇文章结束了,主要介绍消息队列RabbitMQ之常见方法的使用。