本文主要介绍消息队列的基本应用 demo 其他请移步至消息队列应用场景
RabbitMQ 下载官网进行下载
下载后还必须下载并搭建 Erlang 环境 因为 RabbitMQ 是基于 Erlang 开发的
下载完成之后
先安装并配置 Erlang 环境
一直点击下一步即可 都是默认
打开环境变量 在 path 后添加你的安装目录 + /bin (可以看到消息队列环境搭建就不上图了)
安装 RabbitMQ 同 Erlang 一样 都是只用点击下一步即可
重点
安装完成后 win+R 进入cmd 再进入你安装RabbitMQ 下的目录 下的/sbin
接着输入 rabbitmq-plugins enable rabbitmq_management
进行 配置
完成后如下
注意
此时百分之 99 的人进不去如下这个页面
你还需要 显示隐藏的文件夹 再进入你的 C:\Users\你的用户名\AppData\Roaming\RabbitMQ\db
将该文件夹下的所有文件删除 删除后再此执行下面程序
之后进入 安装 RabbitMQ 的目录下 sbin
双击运行
等待 等待 等待
- 浏览器访问
http://localhost:15672/
输入 guest 密码与用户名相同
简单的消息队列 Demo
- 创建 maven 项目
- pom.xml 添加
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.7.2</version>
</dependency>
- 创建生产者实例
public static void main(String[] args) {
// 创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
// 设置端口
factory.setHost("localhost");
factory.setVirtualHost("/");
// 用户名 密码
factory.setUsername("guest");
factory.setPassword("guest");
try {
Connection connection = factory.newConnection();
//Connection 来创建 Channel
Channel channel = connection.createChannel();
for (int i = 0 ; i < 10 ; i++){
//生产模式中多为 json 格式
String msg = "Rabbit消息"+i;
channel.basicPublish("", "NiuMsg", null, msg.getBytes());
Thread.sleep(1000);
}
if (channel != null){
channel.close();
connection.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
- 创建消费者实例(接受消息)
public static void main(String[] args) throws Exception{
//1. 创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
factory.setVirtualHost("/");
factory.setUsername("guest");
factory.setPassword("guest");
//2. 创建连接
Connection connection = factory.newConnection();
//3. 通过 Connection 来创建 Channel
Channel channel = connection.createChannel();
//4. 声明一个队列
//此处参数下面为大家介绍
channel.queueDeclare("NiuMsg", true, false, false, null);
//5. 创建消费者并接收消息
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope,
AMQP.BasicProperties properties, byte[] body)
throws IOException {
String message = new String(body, "UTF-8");
System.out.println("接受到的消息 " + message);
}
};
//6. 为消费者绑定队列
channel.basicConsume("NiuMsg", true, consumer);
}
总结运行结果
-
队列声明 queueDeclare 的参数:第一个参数表示队列名称、第二个参数为是否持久化(true 表示是,队列将在服务器重启时生存)、第三个参数为是否是独占队列(创建者可以使用的私有队列,断开后自动删除)、第四个参数为当所有消费者客户端连接断开时是否自动删除队列、第五个参数为队列的其他参数。
-
先运行消费者实例 然后再接着运行生产者实例
-
消费者就会接收到生产者发送来的消息
‘ -
进入 Queues NiuMsg 就会进入 running 状态 表示正在发送消息
-
当生产者发送完消息 Queues 中的 NiuMsg 的状态就会变为空闲状态
-
而在 Connection 中只要消费者一直处于接受消息状态 连接就一直会存在
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于