学习RabbitMQ(第二章)

1.实现简单队列模式

1.引入Maven   jar包

  <dependencies>
  	<dependency>
	    <groupId>com.rabbitmq</groupId>
	    <artifactId>amqp-client</artifactId>
	    <version>5.2.0</version>
	</dependency>
  </dependencies>

2.创建MQ连接

package com.utils;

import java.io.IOException;

import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class MQConnectionUtils {
	//创建新的MQ连接
	public static Connection newConnection() throws IOException, TimeoutException {
		//1.创建连接工厂
		ConnectionFactory factory = new ConnectionFactory();
		//2.设置连接地址
		factory.setHost("127.0.0.1");
		//3.设置用户名称
		factory.setUsername("user");
		//4.设置用户密码
		factory.setPassword("user");
		//5.设置amqp协议端口号
		factory.setPort(5672);
		//设置virtualHost地址
		factory.setVirtualHost("/adminzrf");
		return (Connection) factory.newConnection();
	}
}

3.创建生产者连接

package com.producer;

import java.io.IOException;

import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.utils.MQConnectionUtils;

//简单队列生产者
public class Producer {
	//队列名称
	private static final String QUEUE_NAME ="zrf_644";
	public static void main(String[] args) throws IOException, TimeoutException {
		//1.创建一个新的连接
		Connection connection = MQConnectionUtils.newConnection();
		//2.创建通道
		Channel channel = connection.createChannel();
		//3.创建一个队列 参数1:队列名称 参数2:是否持久化   参数3:是否唯一  参数4:是否自动删除
		channel.queueDeclare(QUEUE_NAME, false, false, false, null);
		//4.创建消息
		String msg ="zrf_644444";
		//5.生产者发送消息
		channel.basicPublish("", QUEUE_NAME, null, msg.getBytes());
		System.out.println("生产者发送消息成功:"+msg);
		//6.关闭通道和连接
		channel.close();
		connection.close();
	}
}

4.创建消费者连接

package com.consumer;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.AMQP.BasicProperties;
import com.utils.MQConnectionUtils;

public class Consumer {
	//队列名称
		private static final String QUEUE_NAME ="zrf_644";
		public static void main(String[] args) throws IOException, TimeoutException {
			//1.创建一个新的连接
			Connection connection = MQConnectionUtils.newConnection();
			//2.创建通道
			Channel channel = connection.createChannel();
			//3.创建一个队列 参数1:队列名称 参数2:是否持久化   参数3:是否唯一  参数4:是否自动删除
			channel.queueDeclare(QUEUE_NAME, false, false, false, null);
			DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
				//监听获取消息
				@Override
				public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties,
						byte[] body) throws IOException {
					String msg = new String(body,"UTF-8");
					System.out.println("消费者获取生产者消息:"+msg);
				}
			};
			//设置应该模式  设置为true 表示默认自动应答
			channel.basicConsume(QUEUE_NAME, true,defaultConsumer);
		}

}
发布了38 篇原创文章 · 获赞 1 · 访问量 2815

猜你喜欢

转载自blog.csdn.net/qq_31741189/article/details/101871703
今日推荐