SpringBoot整合RabbitMQ

来源:https://www.cnblogs.com/aitiknowledge/archive/2022/08/12/16580151.html
-Advertisement-
Play Games

首先你需要安裝RabbitMQ,安裝教程可百度查下資料即可,不做贅述,敬請諒解 啟動RabbitMQ RabbitMQ可以算是一個非同步消息隊列,在實際的開發項目中,一般是以工具模塊的方式創建,像一些SpringBoot工程所需要的基本依賴都是會有的 說明:關鍵在於誰是消息的生產者、消息的消費者;另外 ...


  • 首先你需要安裝RabbitMQ,安裝教程可百度查下資料即可,不做贅述,敬請諒解
  • 啟動RabbitMQ
  • RabbitMQ可以算是一個非同步消息隊列,在實際的開發項目中,一般是以工具模塊的方式創建,像一些SpringBoot工程所需要的基本依賴都是會有的
  • 說明:關鍵在於誰是消息的生產者、消息的消費者;另外還需要註意生產消費之間消息類型的傳遞
  • 創建一個maven工程,導入RabbitMQ相關的依賴
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
    </dependency>
</dependencies>
  • 編寫一個簡單的配置類,配置消息轉換器
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitConfig {
    /**
     * 配置消息轉換器,預設是字元串轉換器
     * @return MessageConverter
     */
    @Bean
    public MessageConverter messageConverter() {
        return new Jackson2JsonMessageConverter();
    }
}
  • 編寫一個常量類
public class RabbitConstant {
    /** 簡訊發送 */
    public static final String EXCHANGE_DIRECT_MSM = "exchange.direct.msm";
    public static final String ROUTING_MSM = "msm";
    public static final String QUEUE_MSM = "queue.msm";
}
  • 在編寫一個簡單的生產消息的封裝類
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class RabbitService {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     * 生產消息到RabbitMQ中
     * @param exchange 交換機
     * @param routingKey 路由Key
     * @param message 任意類型的消息
     * @return boolean
     */
    public boolean sendMessage(String exchange, String routingKey, Object message) {
        rabbitTemplate.convertAndSend(exchange, routingKey, message);
        return true;
    }
}
  • 雖說一個簡單的整合就這麼幾步,主要還是實操示例,這裡以下單成功,通過手機發送消息通知為示例
  • 還需要在創建一個工程(接觸過微服務項目,很容易瞭解不同模塊有需要放在不同的服務下,便於管理)
  • 既然涉及手機簡訊發消息,可參考SpringBoot整合阿裡雲簡訊服務
  • 在手機簡訊服務中導入消息隊列模塊,所以在原有的基礎上添加配置文件
#rabbitmq地址
spring.rabbitmq.host=your_ip
spring.rabbitmq.port=5672
spring.rabbitmq.username=your_username
spring.rabbitmq.password=your_password
  • 封裝手機發送消息,和手機發送驗證碼業務代碼相似。
@Service
public class MsmServiceImpl implements MsmService {
    @Override
    public boolean orderConfirm(Map<String, Object> param) {
        if (StringUtils.isEmpty(param.get("phone"))) return false;
        // 整合阿裡雲簡訊服務,設置相關參數
        DefaultProfile profile = DefaultProfile.
                getProfile(ConstantPropertiesUtils.REGION_ID,
                        ConstantPropertiesUtils.ACCESS_KEY,
                        ConstantPropertiesUtils.ACCESS_SECRET);
        IAcsClient client = new DefaultAcsClient(profile);
        
        SendSmsRequest request = new SendSmsRequest();
        request.setPhoneNumbers(param.get("phone"));//接收簡訊的手機號碼
        request.setSignName(ConstantPropertiesUtils.SIGN_NAME);//簡訊簽名名稱
        request.setTemplateCode(ConstantPropertiesUtils.TEMPLATE_CODE);//簡訊模板CODE
        
        // 使用json格式   {"msg":"下單成功"}
        request.setTemplateParam(JSONObject.toJSONString(param));//簡訊模板變數對應的實際值
        
        try {
            SendSmsResponse response = client.getAcsResponse(request);
            // 發送簡訊,儘量列印出來是否發送成功
            new Gson().toJson(response);
        } catch (ClientException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
}
  • 在當前簡訊服務模塊中創建一個RabbitMQ消息監聽(可以理解為消息的消費者)
import com.rabbitmq.client.Channel;
import com.xsha.msg.service.MsgService;
import com.xsha.rabbit.constant.RabbitConstant;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MsgReceive {
    @Autowired
    private MsgService msgService;

    /** 消息監聽:監聽到RabbitMQ中有消息就消費,並通過手機發送簡訊通知 */
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = RabbitConstant.QUEUE_MSM, durable = "true"),
            exchange = @Exchange(value = RabbitConstant.EXCHANGE_DIRECT_MSM),
            key = {RabbitConstant.ROUTING_MSM}
    ))
    public void orderConfirm(Map<String, Object> param, Message message, Channel channel) {
        msgService.orderConfirm(param);
    }
}
  • 由於涉及訂單,所以訂單是一個獨立的服務模塊,即導入消息隊列模塊,在原有的基礎上添加配置文件
#rabbitmq地址
spring.rabbitmq.host=your_ip
spring.rabbitmq.port=5672
spring.rabbitmq.username=your_username
spring.rabbitmq.password=your_password
  • 在實際開發中,用戶下單並不會立即通知用戶下單成功,而是通過非同步的方式稍後告知用戶下單成功。簡單示例,不可鑽牛角尖
  • 生成訂單業務(不考慮庫存),就是消息的生產者
@Service
public class OrderServiceImpl implements OrderService {
    @Autowired
    private RabbitService rabbitService;
    @Override
    public void saveOrder(String userId, String id) {
        
        UserInfo userInfo = userInfoService.selectById(userId);
        String phone = userInfo.getPhone();
        // 簡訊信息封裝(根據業務需求,封裝重要信息)
        Map<String,Object> param = new HashMap<String,Object>(){{
            put("title", "消息標題");
            put("phone", phone);
            put("message", "下單成功");
            put("name", userInfo.getName());
            put("currentTime", new DateTime().toString("yyyy-MM-dd HH:mm"));
        }};
        // 生產消息
        rabbitService.sendMessage(RabbitConstant.EXCHANGE_DIRECT_MSM, RabbitConstant.ROUTING_MSM, param);
    }
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、cffi cffi是連接Python與c的橋梁,可實現在Python中調用c文件。cffi為c語言的外部介面,在Python中使用該介面可以實現在Python中使用外部c文件的數據結構及函數。 二、直接在python中通過cffi定義c函數並使用 1、先通過pip3安裝cffi : pip3 i ...
  • 後面的ssm三個框架學的比較潦草,只要是這些東西都是一些配置文件和一些文件的固定寫法這些東西只有在老一點的軟體會用,現在大多數的都是用的springboot的寫的在後面的代碼審計裡面再去慢慢研究這些框架,這樣無實戰的敲框架代碼意義不大,框架學的潦草因為我是學安全的不是學開發的就算以後開發以是用spr... ...
  • 作者:ThinkingKeep 鏈接:https://juejin.cn/post/7118954784853327903 細心的朋友應該會發現,最近,繼新浪微博之後,頭條、騰訊、抖音、知乎、快手、小紅書等各大平臺陸陸續續都上線了“網路用戶IP地址顯示功能”,境外用戶顯示的是國家,國內的用戶顯示的省 ...
  • 多商戶商城系統,也稱為B2B2C(BBC)平臺電商模式多商家商城系統。可以快速幫助企業搭建類似拼多多/京東/天貓/淘寶的綜合商城。 多商戶商城系統支持商家入駐加盟,同時滿足平臺自營、旗艦店等多種經營方式。平臺可以通過收取商家入駐費,訂單交易服務費,提現手續費,簡訊通道費等多手段方式,實現整體盈利。 ...
  • 1、前言 在自動化測試過程中經常需要進行初始化和後期處理等工作,如電商加購物車測試需要先登錄,測試完畢需要關閉瀏覽器等。Pytest提供了5種類型的setup和teardown的方法,具體如下: 模塊級別:setup_module,teardown_module 函數級別:setup_functio ...
  • 一、簡介 1.什麼是MyBatis MyBatis 是一款優秀的持久層框架 它支持自定義 SQL、存儲過程以及高級映射。 MyBatis 免除了幾乎所有的 JDBC 代碼以及設置參數和獲取結果集的工作。 MyBatis 可以通過簡單的 XML 或註解來配置和映射原始類型、介面和 Java POJO( ...
  • 在一個項目的開發過程中,通常伴隨著多套環境:本地環境 local、開發環境 dev、集成測試環境 test、用戶接受測試環境 uat、預生產環境 pre、生產環境 prod。本節的內容有些脫離真實企業開發,因為在真實的企業開發中,不會只開發一個獨立的服務,而是多個微服務。發展至今,雲原生也越來越普遍... ...
  • 《Python編程從入門到實踐》(第二版)免費下載地址~~ 內容簡介 · · · · · · 本書是針對所有層次Python讀者而作的Python入門書。全書分兩部分:第一部分介紹用Python編程所必須瞭解的基本概念,包括Matplotlib等強大的Python庫和工具,以及列表、字典、if語句、 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...