【RabbitMQ與SpringBoot集成測試收發消息】

【RabbitMQ與SpringBoot集成測試收發消息】

    • 一、環境說明
    • 二、實驗步驟
    • 三、小結

一、環境說明

  1. 安裝環境:虛擬機VMWare + Centos7.6 + Maven3.6.3 + JDK1.8
  2. RabbitMQ版本:rabbitmq-server-3.8.8-1.el7.noarch.rpm
  3. 編程工具Idea + 運行JDK為17

二、實驗步驟

  1. 在RabbitMQ的UI界面或命令行上創建新的Virtual Host,取名為vhtest02,如下圖所示:
    在這里插入圖片描述

  2. 使用Idea的Spring Initializr創建生產者工程springrabbitmqtest,坐標如下:
    在這里插入圖片描述

  3. 配置application.properties,可參考添加如下內容:

    spring.rabbitmq.host=192.168.36.132
    spring.rabbitmq.port=5672
    spring.rabbitmq.virtual-host=vhtest02
    spring.rabbitmq.username=sujiangming
    spring.rabbitmq.password=openGauss@1234
    

    根據你自己的環境改成你自己的ip、port、virtual-host、用戶名和密碼。

  4. 編寫生產者配置類,用于創建Exchange、Queue以及將兩者綁定在一起,代碼如下:
    類名為:com.rabbitmq.springboot.config.RabbitMqConfig,代碼如下所示:

    package com.rabbitmq.springboot.config;import org.springframework.amqp.core.*;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;@Configuration
    public class RabbitMqConfig {//創建交換機@Bean(name = "topicExchange")public TopicExchange topicExchange(){return new TopicExchange("springboot_topic_exchange");}//創建隊列@Bean(name = "topicQueueSpringBoot")public Queue topicQueue(){return QueueBuilder.durable("springboot_topic_queue").build();}//隊列綁定交換機@Beanpublic Binding bindingExchangeTopicQueue(@Qualifier("topicQueueSpringBoot") Queue queue,@Qualifier("topicExchange")Exchange exchange){return BindingBuilder.bind(queue).to(exchange).with("log.#").noargs();}
    }
  5. 修改com.rabbitmq.springboot.SpringRabbitMqTestApplicationTests類,添加注解和測試方法,具體代碼如下:

    package com.rabbitmq.springboot;import org.junit.jupiter.api.Test;
    import org.junit.runner.RunWith;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)
    @SpringBootTest
    class SpringRabbitMqTestApplicationTests {@Autowiredprivate RabbitTemplate rabbitTemplate;@Testpublic void testSendMessage() throws InterruptedException {//convertAndSend(交換機名稱,路由key,消息內容)int temp = 0;while (true){rabbitTemplate.convertAndSend("springboot_topic_exchange","log.info","發送了info消息" + temp);rabbitTemplate.convertAndSend("springboot_topic_exchange","log.error","發送了error消息"+ temp);rabbitTemplate.convertAndSend("springboot_topic_exchange","log.warning","發送了warning消息"+ temp);temp++;Thread.sleep(2000);}}@Testvoid contextLoads() {}}
    

    該程序會一直運行,因為我加了while(true),模擬用戶一直產生數據。

  6. 運行測試:運行com.rabbitmq.springboot.SpringRabbitMqTestApplicationTests類中的方法testSendMessage(),正常運行會看到如下內容:
    在這里插入圖片描述

  7. 編寫消費者工程,具體創建工程如步驟2所示;

  8. 修改application.properties,如步驟3所示,可直接復步驟3內容即可;

  9. 創建監聽類:com.rabbitmq.consumer.listener.MessageListener,用于監聽某個隊列的消息,一旦監聽到有數據,立馬進行消費,代碼如下:

    package com.rabbitmq.consumer.listener;import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;/*** 消息監聽器*/
    @Component
    public class MessageListener {/*** 監聽某個隊列的消息* @param msg 接收到的消息*/@RabbitListener(queues = "springboot_topic_queue")public void topicListener(String msg){System.out.println("接收到消息:" + msg);}
    }
    
  10. 修改啟動類:SpringbootRabbitmqConsumerApplication,在其類上面添加注解@ComponentScan("com.rabbitmq.consumer.*"),如不添加該注解運行會自動退出,修改好如下圖所示:
    在這里插入圖片描述

  11. 運行測試:運行SpringbootRabbitmqConsumerApplication類,正常情況下會看到如下內容:
    在這里插入圖片描述

三、小結

本文參考了來自網絡上的資料,如有侵權,請及時聯系博主進行刪除。本文僅是博主本人在學習過程中作為學習筆記使用,常言道:好記性不如爛筆頭。如本文對您有所幫助,請您動動發財的手指給博主點個贊,謝謝您的閱讀~~~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36108.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36108.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36108.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

List和數組互轉方法以及踩坑點

一、數組轉List 1. 使用for循環逐個添加 String[] arr {"A", "B", "C"}; List<String> list new ArrayList<>(); for (String element : arr) {list.add(element); }2. 使用Arrays.asList(arr) String[] arr {"A", …

TypeScript 泛型的深入解析與基本使用

系列文章目錄 文章目錄 系列文章目錄前言一、泛型的概念二、泛型函數三、泛型類四、泛型接口五、泛型約束總結前言 泛型是TypeScript中的一個重要概念,它允許我們在定義函數、類或接口時使用參數化類型,增強了代碼的靈活性和重用性。本文將深入探討泛型的概念,以及如何在Ty…

智能駕駛系列報告之一:智能駕駛 ChatGPT時刻有望來臨

原創 | 文 BFT機器人 L3 功能加速落地&#xff0c;政策標準有望明確 L2 發展日益成熟&#xff0c;L3 功能加速落地。根據市場監管總局發布的《汽車駕駛自動化分級》與 SAE發布的自動駕駛分級標準&#xff0c;自動駕駛主要分為 6 個級別&#xff08;0 級到 5 級&#xff0c;L0 …

Tomcat多實例部署及nginx+tomcat的負載均衡和動靜分離

Tomcat多實例部署 安裝 jdk、tomcat&#xff08;流程可看之前博客&#xff09; 配置 tomcat 環境變量 [rootlocalhost ~]# vim /etc/profile.d/tomcat.sh#tomcat1 export CATALINA_HOME1/usr/local/tomcat/tomcat1 export CATALINA_BASE1/usr/local/tomcat/tomcat1 export T…

Delphi調用WindowsAPI獲取窗口進程

Delphi有封裝的很好的WindowsAPI&#xff0c;直接調用即可&#xff0c;大體上和C差不多&#xff0c;有些地方需要額外處理。 給出一個實例&#xff1a; varg_process: THandle;procedure initGlobal(); beginvarg_handle: HWND;g_handle : FindWindow(clsName, name);if g_ha…

矩陣定理復習記錄

矩陣復習 矩陣導數定理 若A是一個如下矩陣&#xff1a; A [ a 11 a 12 a 21 a 22 ] A \begin{bmatrix}a_{11}&a_{12}\\a_{21}&a_{22}\end{bmatrix} A[a11?a21??a12?a22??] y是一個向量矩陣&#xff1a; y ? [ y 1 y 2 ] \vec{y}\begin{bmatrix}y_1\\y_2\e…

在vue項目使用數據可視化 echarts ,柱狀圖、折線圖、餅狀圖使用示例詳解及屬性詳解

官網地址&#xff1a;Apache ECharts ?一、下載插件并在頁面中引入 npm install echarts --save 頁面導入&#xff1a; import * as echarts from echarts 全局導入&#xff1a; main.js 中&#xff0c;導入并注冊到全局 import echarts from echarts Vue.prototype.$echart…

Clone函數

概述 Clone函數是一種用于復制的計算機函數。在程序編寫中&#xff0c;除了自定義一個拷貝構造函數來實現對象復制外&#xff0c;還可以實現一個clone函數。這需要借助編譯器實現的一個隱藏拷貝構造函數&#xff0c;這樣的做法&#xff0c;更省心。 中文名clone函數外文名clon…

C# 使用FFmpeg.Autogen對byte[]進行編解碼

C# 使用FFmpeg.Autogen對byte[]進行編解碼&#xff0c;參考&#xff1a;https://github.com/vanjoge/CSharpVideoDemo 入口調用類&#xff1a; using System; using System.IO; using System.Drawing; using System.Runtime.InteropServices; using FFmpeg.AutoGen;namespace F…

C++11異步與通信之 packaged_task

概念簡介 packaged_task 用于包裝可調用目標(Callable)為一個對象,如lambda&#xff0c;普通函數&#xff0c;小括號重載等&#xff0c;用于異步調用。 其返回值或所拋異常被存儲于能通過 std::future 對象訪問的共享狀態中&#xff0c;和promise類似。 將函數的調用與函數返…

時序預測 | MATLAB實現EEMD-LSTM、LSTM集合經驗模態分解結合長短期記憶神經網絡時間序列預測對比

時序預測 | MATLAB實現EEMD-LSTM、LSTM集合經驗模態分解結合長短期記憶神經網絡時間序列預測對比 目錄 時序預測 | MATLAB實現EEMD-LSTM、LSTM集合經驗模態分解結合長短期記憶神經網絡時間序列預測對比效果一覽基本介紹模型搭建程序設計參考資料 效果一覽 基本介紹 時序預測 | …

小龜帶你妙寫排序之快速排序

快速排序 一. 快速排序原理二. 題目三. 快速排序的思路分析&#xff08;圖文結合&#xff09;四.代碼 一. 快速排序原理 先從數據序列中選一個元素&#xff0c;并將序列中所有比該元素小的元素都放到它的右邊或左邊&#xff0c;再對左右兩邊分別用同樣的方法處之直到每一個待處…

runtime error: member access within misaligned address(力扣最常見錯誤之一)

runtime error: member access within misaligned address&#xff08;力扣最常見錯誤之一&#xff09; 前言原因和解決辦法總結 前言 最近博主在刷力扣時&#xff0c;明明代碼邏輯都沒問題&#xff0c;但總是報下面這個錯誤&#xff1a; runtime error: member access within…

django實現登錄和登錄的鑒權

1、創建數據庫的管理員表 在models.py 中定義admin表&#xff0c;為了簡單&#xff0c;表里只有用戶名和密碼還有默認加的id 三個字段 from django.db import models# Create your models here.class Admin(models.Model):username models.CharField(verbose_name"用戶…

源碼框架-三勾軟件

javaspringboot微信小程序商城SAAS前后端源碼: 三勾商城是開發友好的微信小程序商城&#xff0c;框架支持SAAS&#xff0c;支持發布 iOS Android 公眾號 H5 各種小程序&#xff08;微信/支付寶/百度/頭條/QQ/釘釘/淘寶&#xff09;等多個平臺&#xff0c;不可多得的二開神器…

訓練用于序列分類任務的 RoBERTa 模型的適配器

介紹 NLP當前的趨勢包括下載和微調具有數百萬甚至數十億參數的預訓練模型。然而,存儲和共享如此大的訓練模型非常耗時、緩慢且昂貴。這些限制阻礙了 RoBERTa 模型開發更多用途和適應性更強的 NLP 技術,該模型可以從多個任務中學習并針對多個任務進行學習;在本文中,我們將重…

Kafka:安裝和配置

producer&#xff1a;發布消息的對象&#xff0c;稱為消息產生者 &#xff08;Kafka topic producer&#xff09; topic&#xff1a;Kafka將消息分門別類&#xff0c;每一個消息稱為一個主題&#xff08;topic&#xff09; consumer&#xff1a;訂閱消息并處理發布消息的對象…

模擬 枚舉

分享牛客算法基礎精選題單題目打卡!!! 目錄 字符串的展開 多項式輸出 機器翻譯 : 鋪地毯 : [NOIP2016]回文日期 字符串的展開 原題鏈接 : 字符串的展開 思路 : 模擬 代碼 : #include<iostream> #include<cstring> #include<algorithm> using na…

Java課題筆記~ ServletContext

單個Servlet的配置對象 web.xml <servlet><servlet-name>FirstServlet</servlet-name><servlet-class>com.ambow.test.FirstServlet</servlet-class><init-param><param-name>charset</param-name><param-value>utf-8&…

centos自動同步北京時間

1、安裝ntpdate服務 yum -y install ntpdate 2、加入自動任務計劃 查找ntpdate的路徑&#xff1a; which ntpdate 復制這個路徑。 編輯自動任務計劃并加入ntpdate&#xff1a; crontab -e # 每小時第30分鐘同步AD域控時間 30 * * * * /usr/sbin/ntpdate -u 192.168.2.8 > …