本文通過簡單的示例代碼和說明,讓讀者能夠瞭解微服務如何集成RabbitMq 之前的教程 https://www.cnblogs.com/leafstar/p/17641358.html 在這裡我將介紹Centos中通過docker進行安裝RabbitMq 1.首先你已經有一臺可以使用的虛擬機(教程很 ...
本文通過簡單的示例代碼和說明,讓讀者能夠瞭解微服務如何集成RabbitMq
之前的教程 https://www.cnblogs.com/leafstar/p/17641358.html
在這裡我將介紹Centos中通過docker進行安裝RabbitMq
1.首先你已經有一臺可以使用的虛擬機(教程很多)
2.yum install docker -y
3.拉取docker鏡像
docker pull rabbitmq
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:latest
4.開啟web管理界面
docker exec -it 15a67332f595 bash
通過rabbitmq-plugins list命令可列出插件的啟用和禁用狀態
rabbitmq-plugins list
開啟RabbitMQ的web界面即可管理RabbitMQ服務
rabbitmq-plugins enable rabbitmq_management
打開瀏覽器並訪問:http://伺服器ip:15672/,並使用預設用戶guest登錄,密碼也為guest。我們可以看到如下圖的管理頁面:
5.ok,接下來我們用已有的微服務項目集成RabbitMq
6.分別在bank1和bank2的pom文件下添加依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
7.在兩個服務配置文件中添加
rabbitmq: host: 192.168.74.134 port: 5672 username: guest password: guest publisher-confirms: false # 消息發送到交換機確認機制,是否確認回調 publisher-returns: true devtools: restart: enabled: false
註意添加位置
8.在bank1包下添加Mq配置如下
@Configuration public class RabbitMQConfig { public static final String EXCHANGE_NAME="boot_topic_exchange"; public static final String QUEUE_NAME="boot_queue"; //交換機 @Bean("bootExchange") public Exchange bootExchange(){ return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build(); } //隊列 @Bean("bootQueue") public Queue bootQueue(){ return QueueBuilder.durable(QUEUE_NAME).build(); } //將交換機和隊列進行綁定 @Bean public Binding bindQueueExchange(@Qualifier("bootQueue") Queue queue, @Qualifier("bootExchange") Exchange exchange){ return BindingBuilder.bind(queue).to(exchange).with("boot.#").noargs(); } }
9.在controller裡面調用,添加下麵自動裝配
@Autowired
private RabbitTemplate rabbitTemplate;
添加介面
@GetMapping("/writeMQ") public String writeMQ() { rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, "boot.as", "Hello,MQ"); return "添加成功"; }
重啟項目並調用,後端沒有列印任何異常
10.進入MQ的webui界面,消息已經成功添加
11.bank2中添加監聽者並啟動bank2
12.可以看到,bank2第一時間拿到了消息
此時消息被消費
13.MQ的使用場景相當廣,這裡只是簡單演示一下,具體業務和場景還需要大家考量。