欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot中整合RabbitMQ(測試+部署上線最新完整)的過程

 更新時間:2025年02月24日 11:31:18   作者:m0_74823947  
本文詳細介紹了如何在虛擬機和寶塔面板中安裝RabbitMQ,并使用Java代碼實現(xiàn)消息的發(fā)送和接收,通過異步通訊,可以優(yōu)化性能,感興趣的朋友一起看看吧

一、RabbitMQ安裝

由于在測試環(huán)境中,我們現(xiàn)在虛擬機上基于docker安裝mq

docker run 

-e RABBITMQ_DEFAULT_USER=quick
-e RABBITMQ_DEFAULT_PASS=123
-v mq-plugins:/plugins
–name mq
–hostname mq
-p 15672:15672
-p 5672:5672
–network your-net
-d
rabbitmq:3.8-management

在docker環(huán)境上運行改指令

前兩個是登錄的用戶名密碼

network是連接的網(wǎng)絡(luò),如果用默認網(wǎng)絡(luò)的話就不需要寫

最后一個是版本,這個是目前測試的版本

二、啟動RabbitMQ

由于目前是測試階段,這里我使用之前學(xué)習(xí)的時候的版本。

創(chuàng)建新用戶后重新登陸,然后創(chuàng)建一個單獨的 _Virtual Hosts (虛擬主機)_來進行隔離。

三、編寫Java代碼

1、引入依賴

        <!--rabbitmq-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

2、配置yml

spring:
  rabbitmq:
    host: ${quick.rabbitmq.host}
    port: ${quick.rabbitmq.port} # 端口
    virtual-host: ${quick.rabbitmq.virtual-host} # 虛擬主機
    username: ${quick.rabbitmq.username} # 用戶名
    password: ${quick.rabbitmq.password} # 密碼
quick:
  rabbitmq:
    host: 192.168.75.101 #服務(wù)器ip地址(此處為虛擬機地址)
    port: 5672 # 端口
    virtual-host: /xxx # 虛擬主機
    username: xxx # 用戶名
    password: xxx # 密碼
    listener:
      simple:
        acknowledge-mode: auto # 自動ack
        retry:
          enabled: true # 開啟消費者失敗重試
          initial-interval: 1000ms # 初識的失敗等待時長為1秒
          multiplier: 1 # 失敗的等待時長倍數(shù),下次等待時長 = multiplier * last-interval
          max-attempts: 3 # 最大重試次數(shù)
          stateless: false # true無狀態(tài);false有狀態(tài)。如果業(yè)務(wù)中包含事務(wù),這里改為false
    publisher-confirm-type: CORRELATED # 交換機的確認
    publisher-returns: true # 隊列的確認

3、配置消息轉(zhuǎn)換器

/**
 * 配置消息轉(zhuǎn)換器
 */
@Configuration
@ConditionalOnClass(RabbitTemplate.class) //有RabbitTemplate依賴才會生效,否則不生效
public class MqConfig {
    @Bean
    public MessageConverter messageConverter(){
        //使用json序列化發(fā)送消息
        return new Jackson2JsonMessageConverter();
    }
}

4、編寫接收方接收消息

/**
 * 接收消息
 */
@Component
@RequiredArgsConstructor
public class StoreListener {
    private final IStoreService storeService;
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "store.addFavorite.success.queue", durable = "true"), // 隊列 起名規(guī)則(服務(wù)名+業(yè)務(wù)名+成功+隊列),durable持久化
            exchange = @Exchange(name = "addFavorite.direct"), // 交換機名稱,交換機默認類型就行direct,所以不用配置direct
            key = "addFavorite.success" // 綁定的key
    ))
    public void listenAddFavoriteCountsSuccess(Long storeId){
        storeService.updateStoreFavoriteUsersCountAdd1(storeId);
    }
}

雖然代碼里面也已經(jīng)解釋了,但是下面也再解釋一下:

value:是隊列信息。起名規(guī)則(服務(wù)名+業(yè)務(wù)名+成功+隊列),durable表示持久化

exchange:是交換機名稱。起名規(guī)則是(業(yè)務(wù)名+direct),和發(fā)送方一致

key:綁定的key。起名規(guī)則是(業(yè)務(wù)名+success),表示成功的key,和發(fā)送方一致

起名規(guī)則是個人而定

5、編寫發(fā)送方發(fā)送消息

@Transactional
    @Override
    public void add(Long storeId) {
        Favorite favorite = Favorite.builder()
                .storeId(storeId)
                .userId(BaseContext.getCurrentId()).build();
        Favorite one = Db.getOne(favorite);
        if (one!=null){
            throw new FavoriteException(MessageConstant.COLLECTION_BE_REPEAT);
        }
        // 更新收藏表
        favoriteMapper.insert(favorite);
        // 更新商品表,收藏數(shù)+1
        //storeService.updateStoreFavoriteUsersCountAdd1(storeId);
        // 發(fā)送消息 (交換機+綁定的key和發(fā)送的消息)
        try {
            rabbitTemplate.convertAndSend("addFavorite.direct","addFavorite.success",storeId);
        } catch (Exception e) {
            log.error("發(fā)送添加收藏消息失敗,店鋪id:{}",storeService,e);
        }
    }

雖然代碼里面也已經(jīng)解釋了,但是下面也再解釋一下:

“addFavorite.direct”:是交換機名稱,和接收方一致

“addFavorite.success”:是綁定的key,和接收方一致

storeId:是發(fā)送的信息

6、小程序驗證

點擊收藏。

在RabbitMQ的界面中隊列也有一條消息出現(xiàn),說明mq實現(xiàn)異步通訊成功。

該案例是收藏商品后完成收藏表插入語句后,還要去商品表更新商品表,更新該商品的被收藏數(shù)加一,但是如果同步通訊的話,響應(yīng)會有延遲,可能會對性能造成一定影響,但是通過異步通訊,不需要實時響應(yīng),就會對性能有一定的優(yōu)化。

三、寶塔中安裝RabbitMQ

1、下載erlang

RabbitMQ服務(wù)端是由并發(fā)式語言Erlang編寫的,所以安裝RabbitMQ的之前需要安裝Erlang,保證所需要的環(huán)境。

安裝之前注意版本兼容問題:Erlang Version Requirements | RabbitMQ

安裝erlang地址:https://www.erlang-solutions.com/downloads/#

(1)查看rabbitmq的版本

先去寶塔查看rabbitmq的版本:

(2)查找erlang兼容版本

然后去找到版本兼容的erlang版本:Erlang Version Requirements | RabbitMQ

(3)安裝RPM包

去下載:https://www.erlang-solutions.com/downloads/#

下載后拿到rpm文件:

注意:這里沒有下載的版本,下載需要與自己的版本一致,如果發(fā)現(xiàn)啟動不了RabbitMQ,請看后面的啟動RabbitMQ。

注意!注意!注意!

2、前往寶塔面板

進入tmp目錄,將之前的rpm包放進去。

3、安裝RabbitMQ

在軟件商店中安裝RabbitMQ

出現(xiàn)問題:

看到報錯日志,我又去下載報錯日志里面的版本。

再次去:https://www.erlang-solutions.com/downloads/#

我是centos7,所以下載該版本。那邊有點不人性化,我嘗試了幾次才下載到自己的版本。

將之前的哪個rmp文件刪掉,再將剛剛下載的rpm文件重命名再次放入tmp目錄中

上面我重命名錯了,只記得修改后面,下面是再次修改后的結(jié)果。

卸載rabbitmq,然后再重新安裝一次。

還是出現(xiàn)報錯:

出現(xiàn)了這個報錯,很莫名其妙,然后我就去用docker安裝,有解決辦法的可以評論一下。

在其他教程到這一步已經(jīng)可以了,可以參考下面兩篇博客:

寶塔面板安裝RabbitMQ(已解決)

寶塔安裝rabbitMQ實戰(zhàn)

四、docker中安裝rabbitmq

1、安裝docker

2、配置docker鏡像加速

# 創(chuàng)建目錄
mkdir -p /etc/docker
# 復(fù)制內(nèi)容,注意把其中的鏡像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://mirrors.tuna.tsinghua.edu.cn",
        "http://mirrors.sohu.com",
        "https://ustc-edu-cn.mirror.aliyuncs.com",
        "https://ccr.ccs.tencentyun.com",
        "https://docker.m.daocloud.io",
        "https://docker.awsl9527.cn"
    ]
}
EOF
# 重新加載配置
systemctl daemon-reload
# 重啟Docker
systemctl restart docker

3、拉取RabbitMQ鏡像

docker pull rabbitmq

4、運行RabbitMQ

docker run 

-e RABBITMQ_DEFAULT_USER=quick
-e RABBITMQ_DEFAULT_PASS=quick
-v mq-plugins:/plugins
–name mq
–hostname mq
-p 15672:15672
-p 5672:5672
-d
rabbitmq

5、查看鏡像和容器

docker images
docker ps

到這里已經(jīng)是成功在docker中裝好mq容器了

但是在我訪問http://主機ip:15672的時候卻無法訪問,即使我開放了服務(wù)器的安全組。后來猜到應(yīng)該是客戶端服務(wù)可能是沒開啟,在之前寶塔軟件里面好像有看過這個東西。

6、開放客戶端服務(wù)

在mq容器中打開終端

列出所有可用的插件:

rabbitmq-plugins list

找到rabbitmq_management:

開啟rabbitmq_management:

rabbitmq-plugins enable rabbitmq_management

然后再訪問客戶端,成功訪問:

7、登錄RabbitMQ客戶端

這里顯示有些特性標(biāo)志未開啟,我們可以去開啟那些標(biāo)志。

參考博客:Docker RabbitMQ安裝

8、創(chuàng)建虛擬主機

創(chuàng)建一個單獨的虛擬主機來進行隔離,這里可以參考前面在虛擬機上的操作。

9、關(guān)于圖形化界面可能出現(xiàn)的問題

Stats in management UI are disabled on this node

可以參考這篇博客:

RabbitMQ客戶端界面問題 

五、部署項目驗證

參考我之前的:部署

修改yml配置文件,修改下面的消息:

  rabbitmq:
    host: ${quick.rabbitmq.host}
    port: ${quick.rabbitmq.port} # 端口
    virtual-host: ${quick.rabbitmq.virtual-host} # 虛擬主機
    username: ${quick.rabbitmq.username} # 用戶名
    password: ${quick.rabbitmq.password} # 密碼

在已經(jīng)上線的小程序測試~~

目前只有一個人收藏,現(xiàn)在去測試一下。

收藏成功,去看一下數(shù)據(jù)庫,查看是否更新。

去查看mq客戶端:

成功更新,說明使用RabbitMQ實現(xiàn)異步通訊成功。

六、拓展使用

關(guān)于一些拓展使用可以參考以下這些博客:

RabbitMQ實現(xiàn)多線程處理接收消息

在配置mq過程中遇到許許多多的bug和問題,改了很久很久,如果里面有哪些不足的歡迎指正和建議?。。?/p>

到此這篇關(guān)于SpringBoot中整合RabbitMQ(測試+部署上線最新完整)的文章就介紹到這了,更多相關(guān)SpringBoot整合RabbitMQ部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java INPUTSTREAM如何實現(xiàn)重復(fù)使用

    Java INPUTSTREAM如何實現(xiàn)重復(fù)使用

    這篇文章主要介紹了Java INPUTSTREAM如何實現(xiàn)重復(fù)使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • java與scala數(shù)組及集合的基本操作對比

    java與scala數(shù)組及集合的基本操作對比

    這篇文章主要介紹了java與scala數(shù)組及集合的基本操作對比,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 詳解Eclipse 字體、字號的設(shè)置、最佳字體推薦

    詳解Eclipse 字體、字號的設(shè)置、最佳字體推薦

    這篇文章主要介紹了Eclipse 字體、字號的設(shè)置、最佳字體推薦,需要的朋友可以參考下
    2020-09-09
  • Java對象的四種引用方式實例分析

    Java對象的四種引用方式實例分析

    這篇文章主要介紹了Java對象的四種引用方式,簡單描述了四種引用方式的概念、應(yīng)用場景并結(jié)合實例形式分析了弱引用所引用對象的垃圾回收過程,需要的朋友可以參考下
    2019-08-08
  • Spring @Configuration和@Component的區(qū)別

    Spring @Configuration和@Component的區(qū)別

    今天小編就為大家分享一篇關(guān)于Spring @Configuration和@Component的區(qū)別,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • java經(jīng)典問題:連個字符串互為回環(huán)變位

    java經(jīng)典問題:連個字符串互為回環(huán)變位

    連個字符串互為回環(huán)變位經(jīng)常出現(xiàn)在java程序員面試中,這個是考驗程序員的解題思路和方法的最經(jīng)典的一題,小編為大家詳細分析一下,一起來學(xué)習(xí)吧。
    2017-11-11
  • Springboot  jar包 idea 遠程調(diào)試的操作過程

    Springboot  jar包 idea 遠程調(diào)試的操作過程

    文章介紹了如何在IntelliJ IDEA中遠程調(diào)試Spring Boot項目的Jar包,本文通過圖文并茂的形式給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Spring Boot利用Lombok減少Java中樣板代碼的方法示例

    Spring Boot利用Lombok減少Java中樣板代碼的方法示例

    spring Boot是非常高效的開發(fā)框架,lombok是一套代碼模板解決方案,將極大提升開發(fā)的效率,下面這篇文章主要給大家介紹了關(guān)于Spring Boot利用Lombok減少Java中樣板代碼的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • 基于XML的MyBatis的環(huán)境搭建過程詳解(IDEA)

    基于XML的MyBatis的環(huán)境搭建過程詳解(IDEA)

    這篇文章主要介紹了基于XML的MyBatis的環(huán)境搭建過程詳解(IDEA),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • SpringBoot超詳細深入講解底層原理

    SpringBoot超詳細深入講解底層原理

    我們知道springboot內(nèi)部是通過spring框架內(nèi)嵌Tomcat實現(xiàn)的,當(dāng)然也可以內(nèi)嵌jetty,undertow等等web框架;另外springboot還有一個特別重要的功能就是自動裝配,這又是如何實現(xiàn)的呢
    2022-07-07

最新評論