SpringBoot 整合 RabbitMQ 實踐

來源:www.cnblogs.com/cott/p/12402423.html

前文總結了Dubbo與SpringBoot的整合,本文基於這套框架,引入RabbitMQ消息隊列。

1.在linux環境使用docker安裝RabbitMQ

<code>//拉取鏡像
docker pull rabbitmq:management
//啟動鏡像
docker run -di --name myrabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management/<code>

安裝成功後登陸控制檯

SpringBoot 整合 RabbitMQ 實踐


2.生產者

pom.xml中引入RabbitMQ依賴

<code>
<dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-amqp/<artifactid>
  <version>1.3.5.RELEASE/<version>
/<dependency>/<code>

application.yml

配置RabbitMQ服務端連接,和交換機名稱

<code>spring:
rabbitmq:
port: 5672
username: admin
password: admin
host: 192.168.200.128
virtual-host: /

order:
fanout:
exchange: order.fanout.exchange/<code>

Producer.java

生產者向MQ發送消息


SpringBoot 整合 RabbitMQ 實踐

UserServiceImpl.java

在用戶接口的實現類中,調用生產者的方法

SpringBoot 整合 RabbitMQ 實踐

3.消費者

pom.xml中引入RabbitMQ依賴

<code>
<dependency>
   <groupid>org.springframework.boot/<groupid>
   <artifactid>spring-boot-starter-amqp/<artifactid>
  <version>1.3.5.RELEASE/<version>
/<dependency>/<code>

配置RabbitMQ服務端信息,和交換機以及隊列名稱

application.yml

<code>spring:
  rabbitmq:
    port: 5672
    username: admin
    password: admin
    host: 192.168.200.128
    virtual-host: /

order:
  fanout:
    exchange: order.fanout.exchange
    queue: order.fanout.queue/<code>

@RabbitListener註解,綁定隊列,交換機,以及選擇交換模式FANOUT

  • @RabbitListener 可以標註在類上面,需配合 @RabbitHandler 註解一起使用
  • @RabbitListener 標註在類上面表示當有收到消息的時候,就交給 @RabbitHandler 的方法處理,具體使用哪個方法處理,根據 MessageConverter 轉換後的參數類型

Consumer.java(消費者)

<code>package com.cott.gmail.bootorderserviceconsumer.service.impl;

import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.stereotype.Component;

@Component
@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "${order.fanout.queue}", autoDelete = "true"), exchange =
@Exchange(value = "${order.fanout.exchange}", type = ExchangeTypes.FANOUT)))
public class Consumer {

    @RabbitHandler
    public void processMessage(String msg) {

        System.out.format("Receiving Message: -----[%s]----- \\n.", msg);
    }
}/<code>

消費者中有調用生產者getAddress()的方法,生產者向MQ中發送一條消息,同時消費者監聽MQ,消費消息。

OrderServiceImpl.java


SpringBoot 整合 RabbitMQ 實踐

4.驗證

先後啟動生產者和消費者,在瀏覽器發起請求

SpringBoot 整合 RabbitMQ 實踐

消費者控制檯輸出

SpringBoot 整合 RabbitMQ 實踐

同時在RabbitMQ控制檯查看監控日誌

SpringBoot 整合 RabbitMQ 實踐


分享到:


相關文章: