1.什么是RabbitMQ
RabbitMQ是一个免费的,开源的,可扩展的消息队列解决方案。本质是一个消息代理,可以理解AMQP(高级消息队列协议),但也可以与其他流行的消息解决方案一起使用。它具有高可用性,容错性和可扩展性。
它是一个中间件层,使您的应用程序中的不同服务可以彼此通信,而不必担心消息丢失。本质是使不同的进程或程序进行解耦。
2.RabbitMQ环境搭建
参考:https://www.cnblogs.com/saryli/p/9729591.html
3.学习5种队列
3.1创建RabbitMq项目
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.14.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lpp</groupId>
<artifactId>rabbitmq</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>rabbitmq</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.1 简单队列
在下图中,“ P”是我们的生产者,“ C”是我们的消费者。中间的框是一个队列-RabbitMQ代表使用者保留的消息缓冲区。
生产者P将生产的消息“Hello”发送给队列,消费者再从队列中获取。
建立连接
package com;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class ConnectionUtil {
public static Connection getConnection() throws Exception{
//1.定义连接工程
ConnectionFactory factory = new ConnectionFactory();
//2.设置服务地址
factory.setHost("localhost");
//3.端口
factory.setPort(5672);
//4.设置虚拟信息
factory.setVirtualHost("admin");
factory.setUsername("admin");
factory.setPassword("123456");
Connection connection = factory.newConnection();
return connection;
}
}
生产者发送消息到队列
package com.lpp.rabbitmq.queue;
import com.ConnectionUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
public class Send {
private final static String QUEUE_NAME = "q_test_01";
public static void main(String[] args)throws Exception {
//获取连接
Connection connection = ConnectionUtil.getConnection();
//从连接中创建管道
Channel channel = connection.createChannel();
//管道中创建队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
//消息内容
String message = "Hello World";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println(" [x] Sent '" + message + "'");
//关闭管道和连接
channel.close();
connection.close();
}
}