SpringBoot+RabbitMQ實現訊息訂閱傳送
阿新 • • 發佈:2022-12-09
RabbitMQ 安裝 (docker)
- 拉取rabbitmq映象檔案
# 未指定版本,拉取最新版本
root# docker pull rabbitmq
- 啟動映象
root# docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq
- 配置rabbitmq外掛
# 配置rabbitmq web管理頁面 root# docker exec -it 容器id rabbitmq-plugins enable rabbitmq_management # 配置rabbitmq mqtt協議 root# docker exec -it 容器id rabbitmq-plugins enable rabbitmq_mqtt # 如果我們需要瀏覽器通過websocket連線到rabbitmq,我們還需要啟動rabbitmq_web_mqtt外掛 root# docker exec 容器id rabbitmq-plugins enable rabbitmq_web_mqtt # docker 檢視已安裝外掛 root# docker exec rabbitmq rabbitmq-plugins list
-
訪問web管理頁面
瀏覽器輸入:ip+15672 -
可能出現問題
5.1 Stats in management UI are disabled on this node。- docker exec -it 容器id /bin/bash
- cat /etc/rabbitmq/conf.d/management_agent.disable_metrics_collector.conf (true)
- cd /etc/rabbitmq/conf.d/
- echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf (將true修改為false)
- docker restart 容器id
SpringBoot 配置
- 新增pom依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.3.12.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>2.3.12.RELEASE</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> <version>2.3.12.RELEASE</version> </dependency>
- 新增yml配置
server:
port: 32372
spring:
application:
name: spring-rabbitmq
# rabbitmq 配置資訊
rabbitmq:
host: 192.168.48.132
port: 5672
username: guest
password: guest
- 生產者
package com.ao.springrabbitmq.service.producer;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class Producer {
@Autowired
private RabbitTemplate rabbitTemplate;
public void produce() {
String message = "晚上加班";
System.out.println("老闆說:" + message);
rabbitTemplate.convertAndSend("notice_queue", message);
}
}
- 消費者
package com.ao.springrabbitmq.service.consumer;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class Consumer {
@RabbitHandler
@RabbitListener(queuesToDeclare = @Queue("notice_queue"))
public void process(String message) {
System.out.println("打工人收到通知:" + message);
}
}
- 測試類
package com.ao.springrabbitmq;
import com.ao.springrabbitmq.service.producer.Producer;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class RabbitMQTests {
@Autowired
Producer producer;
@Test
public void amqpTest() throws InterruptedException {
// 生產者傳送訊息
producer.produce();
Thread.sleep(1000);
}
}