RabbitMQ-构建简单的生产者和消费者

在项目开发中,出现插入数据业务处理特别慢的情况,想起之前学习到的消息队列具有异步处理任务的功能,故想着可不可以引入,以下是自己在写简单demo的过程。
(因为在引入消息队列会降低系统的可用性、复杂度也会提高,最终作罢,采取了线程池的方式去处理插入数据)

  1. 确保 RabbitMQ 服务已开启,管控台能正常登陆 基于Docker安装RabbitMQ以及 RabbitMQ的初步使用
    RabbitMQ-构建简单的生产者和消费者_第1张图片
  2. 新建 SpringBoot 项目并引入 mq依赖

		<dependency>
			<groupId>com.rabbitmqgroupId>
			<artifactId>amqp-clientartifactId>
			<version>3.6.5version>
		dependency>
	
  1. 生产者源代码

package com.rabbitmq.rabbitmqdemo.quickstart;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
/**
* @Description  消息生产者
* @since  2019年5月6日 下午4:30:38
* @author LiuLiBin
*/

public class Producer {
	
	public static void main(String[] args) throws Exception{

		// 1 创建一个ConnectionFactory, 并进行配置
		ConnectionFactory connectionFactory = new ConnectionFactory();
		connectionFactory.setHost("172.23.244.97"); //ip地址
		connectionFactory.setPort(5672); // 端口号
		connectionFactory.setVirtualHost("/");// 虚拟主机

		// 2 通过连接工厂创建连接
		Connection connection = connectionFactory.newConnection();

		// 3 通过connection创建一个Channel
		Channel channel = connection.createChannel();

		// 4 通过Channel发送数据
		for (int i = 0; i < 5; i++) {
			String msg = "Hello RabbitMQ!";
			// 1 exchange 2 routingKey  3 properties  4 body:消息实体,必须是字节数组
			// 不指定 exchange 时,会走第一个交换机( AMQP default),这个交换机的路由规则就是判断是否  routingKey = 消费者的queueName,有的话就将消息路由
			channel.basicPublish("", "test001", null, msg.getBytes());
		}

		// 5 记得要关闭相关的连接
		channel.close();
		connection.close();
	}
}

  1. 消费者源代码

package com.rabbitmq.rabbitmqdemo.quickstart;
/**
* @Description  消息消费者
* @since  2019年5月6日 下午4:31:05
* @author LiuLiBin
*/

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;
import com.rabbitmq.client.QueueingConsumer.Delivery;

public class Consumer {
	
	public static void main(String[] args) throws Exception{
		

		//1 创建一个ConnectionFactory, 并进行配置
		ConnectionFactory connectionFactory = new ConnectionFactory();
		connectionFactory.setHost("172.23.244.97"); //ip地址
		connectionFactory.setPort(5672); // 端口号
		connectionFactory.setVirtualHost("/");// 虚拟主机
		
		//2 通过连接工厂创建连接
		Connection connection = connectionFactory.newConnection();
		
		//3 通过connection创建一个Channel 通道
		Channel channel = connection.createChannel();
		
		//4 声明(创建)一个队列,消费者监听这个队列
		String queueName = "test001";
		// 1 queueName 2 是否持久化(持久化后) 3 是否独占 4 是否自动删除
		channel.queueDeclare(queueName, true, false, false, null);
		
		//5 创建消费者,建立在channel通道上
		QueueingConsumer queueingConsumer = new QueueingConsumer(channel);
		
		//6 设置Channel
		// 1 队列名 2 是否自动接收 3 具体消费者对象
		channel.basicConsume(queueName, true, queueingConsumer);
		
		while(true){
			//7 循环获取消息
			Delivery delivery = queueingConsumer.nextDelivery();
			String msg = new String(delivery.getBody());
			System.err.println("消费端: " + msg);
			//Envelope envelope = delivery.getEnvelope();
		}
		
	}
}


  1. 测试
  • 先确保 rabbitMq 服务开启
  • 启动 Consumer ,创建队列等
  • 启动 Producer,发送消息,发完后,Consumer就会接收到消息并使用

控制台显示输出成功
RabbitMQ-构建简单的生产者和消费者_第2张图片
管控台有相应记录
RabbitMQ-构建简单的生产者和消费者_第3张图片

你可能感兴趣的:(消息队列)