借鉴原文地址:https://blog.csdn.net/hellozpc/article/details/81436980
一、什么是简单消息队列
P:消息的生产者
C:消息的消费者
红色:队列
生产者将消息发送到队列,消费者从队列中获取消息。
二、导入客户端依赖
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.4.1</version>
</dependency>
三、获取MQ的连接
/**
* 获取 MQ 连接的工具类
*/
public class ConnectionUtils {
public static Connection getConnection() throws IOException {
// 定义连接工厂
ConnectionFactory factory = new ConnectionFactory();
//设置服务地址
factory.setHost("127.0.0.1");
//设置 AMQP协议 端口
factory.setPort(5672);
//设置账号信息、用户名、密码、vhost
factory.setVirtualHost("/vhost_zy");
factory.setUsername("user_zy");
factory.setPassword("123");
//通过工程获取连接
Connection connection = factory.newConnection();
return connection;
}
}
四、生产者发送消息到队列
/**
* 消息生产者
*/
public class Send {
public static final String QUEUE_NAME = "test_simple_queue";
public static void main(String[] args) throws IOException {
// 获取连接
Connection connection = ConnectionUtils.getConnection();
// 获取一个通道
Channel channel = connection.createChannel();
// 声明一个队列
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
String msg = "Hello Simple Queue !";
//exchange routingKey props body
channel.basicPublish("",QUEUE_NAME,null,msg.getBytes());
System.out.println("------send msg :"+ msg);
channel.close();
connection.close();
}
}
在管理中心就可以看到发送过来的消息
五、消费者获得消息
/**
* 消费者获得消息
*/
public class Receive {
public static final String QUEUE_NAME = "test_simple_queue";
public static void main(String[] args) throws IOException, InterruptedException {
// 获取连接
Connection connection = ConnectionUtils.getConnection();
// 创建通道
Channel channel = connection.createChannel();
//定义消息队列的消费者
QueueingConsumer consumer = new QueueingConsumer(channel);
//监听队列
channel.basicConsume(QUEUE_NAME,true,consumer);
while (true){
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String msgStr = new String(delivery.getBody());
System.out.println("------[Receive] msg :"+msgStr);
}
}
}
新API调用获取消息的消费者代码
public class Receive {
public static final String QUEUE_NAME = "test_simple_queue";
public static void main(String[] args) throws IOException, InterruptedException {
// 获取连接
Connection connection = ConnectionUtils.getConnection();
// 创建通道
Channel channel = connection.createChannel();
// 队列声明
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
// 定义一个消费者
DefaultConsumer consumer = new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String msg = new String(body,"utf-8");
System.out.println("--------------------new API ----------------------");
System.out.println("------[Receive] msg :"+msg);
}
};
// 监听队列
channel.basicConsume(QUEUE_NAME,true,consumer);
}