本文主要介绍消息队列的基本应用 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 中只要消费者一直处于接受消息状态 连接就一直会存在
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于