【RabbitMQ二】——RabbitMQ入门教程(简单模式)
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
RabbitMQ入门教程简单模式
前言
本篇博客主要是实现RabbitMQ最简单的模式一个生产者一个队列一个消费者。通过本篇博客能够掌握RabbitMQ最基本的运用。
本篇博客主要学习至RabbitMQ官网的教程RabbitMQ官网教程地址
入门教程选择最简单的模式本篇博客选择的是Java语言
RabbitMQ相关术语
RabbitMQ是一个消息代理RabbitMQ接收和转发消息。可以把它看做一个邮局当你把邮件放进邮箱中邮递员一定会将邮件邮递到接收邮件的人那里。在这个实例中RabbitMQ可以是邮箱、邮局、和邮递员。
Producer生产者
一个发送消息的程序是一个生产者
queue(队列
队列可以看做是一个邮箱队列只受主机的内存和磁盘限制它本质上是一个大的消息缓冲区。许多生产者可以向一个队列发送消息许多消费者可以尝试从一个队列接收数据。
consumer消费者
一个主要等待接收消息的程序
RabbitMQ简单模式示例
**业务场景**使用JAVA编写两个程序一个生产者发送一条消息一个消费者接受消息并把消息打印出来。
首先创建一个Maven项目在pom文件中引入RabbitMQ java client依赖
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.10.0</version>
</dependency>
编写生产者Send.java类
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
/**
* @author : [WangWei]
* @version : [v1.0]
* @className : Send
* @description : [消息生产者类]
* @createTime : [2023/1/13 8:21]
* @updateUser : [WangWei]
* @updateTime : [2023/1/13 8:21]
* @updateRemark : [描述说明本次修改内容]
*/
public class Send {
private final static String QUEUE_NAME = "hello";
public static void main(String[] argv) throws Exception {
//创建工厂
ConnectionFactory factory = new ConnectionFactory();
//RabbitMQ服务器ip地址
factory.setHost("ip");
//端口号 默认值为5672
factory.setPort(5672);
//为用户分配的虚拟主机 默认值为/
factory.setVirtualHost("/");
//用户名 默认为guest
factory.setUsername("用户名");
//密码 默认为guest
factory.setPassword("密码");
//创建连接
try (Connection connection = factory.newConnection();
//创建Channel
Channel channel = connection.createChannel()) {
//声明队列声明一个队列是幂等的——它只会在它不存在的情况下被创建。
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
//生产的消息
String message = "Hello World!";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println(" [x] Sent '" + message + "'");
}
}
}
编写消费者Recv.java类
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
/**
* @author : [WangWei]
* @version : [v1.0]
* @className : Recv
* @description : [消费者类]
* @createTime : [2023/1/13 8:27]
* @updateUser : [WangWei]
* @updateTime : [2023/1/13 8:27]
* @updateRemark : [描述说明本次修改内容]
*/
public class Recv {
private final static String QUEUE_NAME = "hello";
public static void main(String[] argv) throws Exception {
//创建工厂
ConnectionFactory factory = new ConnectionFactory();
//RabbitMQ服务器ip地址
factory.setHost("ip");
//端口号 默认值为5672
factory.setPort(5672);
//为用户分配的虚拟主机 默认值为/
factory.setVirtualHost("/");
//用户名 默认为guest
factory.setUsername("用户名");
//密码 默认为guest
factory.setPassword("密码");
//打开一个连接和通道并声明队列
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
//这里也声明了队列。因为可能会在发布者之前启动消费者所以我们希望在尝试从队列中消费消息之前确保队列存在。
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
//我们要告诉服务器将队列中的消息传递给我们。因为它将异步地向我们推送消息所以我们以对象的形式提供了一个回调该回调将缓冲消息直到我们准备好使用它们。这就是DeliverCallback子类所做的。
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody(), "UTF-8");
System.out.println(" [x] Received '" + message + "'");
};
channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
}
}
运行生产者类生产消息执行Send类中的Main方法执行的结果图
访问RabbitMQ Web端可以在queue中找到名为hello的队列可以看到已经有一条消息在队列中了。
运行消费者类消费这条消息并将消息内容打印到控制台上。
再次访问RabbitMQ web端可以在hello队列中看到消息已经被消费了。
总结
入门教程只是简单的运用里面的具体细节是没有具体分析的。但是能够起到初步接触和使用RabbitMQ进行消息的存储、转发。