RabbitMQ
Что такое RabbitMQ?
RabbitMQЭто программное обеспечение брокера сообщений с открытым исходным кодом (также известное как ПО промежуточного слоя, ориентированное на сообщения), которое реализует протокол расширенной очереди сообщений (AMQP). Сервер RabbitMQ написан на языке Erlang, а кластеризация и отказоустойчивость построены на платформе открытой телекоммуникационной платформы. Все основные языки программирования имеют клиентские библиотеки, взаимодействующие с интерфейсом прокси.
Установка докера
# 拉取镜像
docker pull rabbitmq
# 启动RabbitMQ服务
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:latest
Включить управление RabbitMQ
После запуска установки RabbitMQ по умолчанию веб-интерфейс управления не включается.
# 进入docker容器,获取上面启动RabbitMQ服务的容器ID,用一下命令
docker exec -it 15a67332f595 bash
пройти черезrabbitmq-plugins listКоманда для вывода списка включенных и отключенных статусов плагинов
rabbitmq-plugins list
Откройте веб-интерфейс RabbitMQ.
rabbitmq-plugins enable rabbitmq_management
Управление службами RabbitMQ
Откройте браузер и посетите:http://localhost:15672/
, и используйте пользователя по умолчаниюguest
логин, пароль тожеguest
. Мы можем увидеть страницу управления, как показано ниже:
Использование RabbitMQ в SpringBoot
Построить проект
Ниже у нас есть интуитивное ощущение и понимание RabbitMQ за счет интеграции RabbitMQ в приложение Spring Boot и реализации простого примера отправки и получения сообщений.
Интегрировать RabbitMQ в Spring Boot очень легко, а модуль AMQP может хорошо поддерживать RabbitMQ.Поговорим о процессе интеграции подробнее:
- Создайте новый весенний загрузочный проект и назовите его: «Rabbitmq-Proj».
- существует
pom.xml
Вводятся следующие зависимостиspring-boot-starter-amqp
Используется для поддержки 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.3.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.huyida</groupId>
<artifactId>rabbitmq-proj</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>rabbitmq-proj</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-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.7.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>2.3.1.RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
существуетapplication.properties
Настройте подключение и информацию о пользователях RabbitMQ в , пользователи могут вернуться к содержимому установки выше и создать пользователей на странице управления.
spring.application.name=rabbitmq-proj
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
режиссер
Создать производителя сообщенийSender
. путем инъекцииAmqpTemplate
Экземпляр интерфейса для реализации отправки сообщений,AmqpTemplate
Интерфейс определяет набор основных операций для протокола AMQP. В Spring Boot его конкретная реализация внедряется в соответствии с конфигурацией. В этом производителе мы создадим строку и отправим ее на имяchatbot
в очереди.
@Component
public class Sender {
public static final String QUEUENAME = "chatbot";
@Autowired
private AmqpTemplate rabbitTemplate;
public void send() {
String context = "hello " + new Date();
System.out.println("Sender:" + context);
this.rabbitTemplate.convertAndSend(QUEUENAME, context);
}
}
потребитель
Создание потребителя сообщенийReceiver
. пройти через@RabbitListener
Аннотация определяет пару классовchatbot
Мониторинг очереди и использование@RabbitHandler
Аннотация для указания метода обработки сообщения. Таким образом, потребитель реализуетchatbot
Потребление очереди, операция потребления - это строковое содержимое выходного сообщения.
@Component
@RabbitListener(queues = "chatbot")
public class Receiver {
@RabbitHandler
public void process(String s) {
System.out.println("Receiver:" + s);
}
}
класс конфигурации
Создайте класс конфигурации для RabbitMQRabbitConfig
, который используется для настройки расширенной информации, такой как очереди, коммутаторы и маршруты. Здесь мы сосредоточимся на начале работы и сначала определим его с минимальной конфигурацией, чтобы завершить базовый процесс производства и потребления.
@Configuration
public class RabbitConfig {
public static final String QUEUENAME = "chatbot";
@Bean
public Queue helloQueue() {
return new Queue(QUEUENAME);
}
}
Создать основной класс:
@SpringBootApplication
public class RabbitmqProjApplication {
public static void main(String[] args) {
SpringApplication.run(RabbitmqProjApplication.class, args);
}
}
модульный тест
Создайте класс модульного теста для вызова производства сообщений:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = RabbitmqProjApplication.class)
public class SenderTest {
@Autowired
private Sender sender;
@Before
public void before() throws Exception {
System.out.println("Start sending message...");
}
@After
public void after() throws Exception {
System.out.println("Finish sending message!");
}
/**
* Method: send()
*/
@Test
public void testSend() throws Exception {
sender.send();
}
}
запустить службу
После завершения программирования попробуем запустить его. Сначала убедитесь, что сервер RabbitMQ запущен, а затем выполните следующие действия:
- Запускаем основной класс приложения, из консоли видим следующее, программа создает доступ
127.0.0.1:5672
Связь.
2020-08-09 17:03:31.126 INFO 32502 --- [ main] o.s.a.r.c.CachingConnectionFactory : Created new connection: rabbitConnectionFactory#2f6bbeb0:0/SimpleConnection@18eec010 [delegate=amqp://guest@127.0.0.1:5672/, localPort= 60451]
При этом через панель управления RabbitMQ мы можем видеть записи, содержащие текущее подключение в Connection и Channels.
- Запуск класса тестирования устройства мы можем увидеть следующий вывод в консоли, сообщение отправляется на сервер Rabbitmq
chatbot
в очереди.
Start sending message...
Sender:hello Sun Aug 09 17:06:12 CST 2020
Finish sending message!
Переключившись на консоль основного класса приложения, мы можем увидеть вывод, подобный следующему, ответ потребителя наchatbot
Выполняется прослушиватель очереди и выводится информация о полученном сообщении.
Receiver:hello Sun Aug 09 17:06:12 CST 2020
Суммировать
В приведенном выше примере мы вводим в приложение Spring Bootspring-boot-starter-amqp
Модуль, простая конфигурация завершает разработку производства и потребления сообщений RabbitMQ.