亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、RabbitMQ安裝

由于在測(cè)試環(huán)境中,我們現(xiàn)在虛擬機(jī)上基于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)境上運(yùn)行改指令

前兩個(gè)是登錄的用戶名密碼

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

最后一個(gè)是版本,這個(gè)是目前測(cè)試的版本

二、啟動(dòng)RabbitMQ

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

創(chuàng)建新用戶后重新登陸,然后創(chuàng)建一個(gè)單獨(dú)的 _Virtual Hosts (虛擬主機(jī))_來(lái)進(jìn)行隔離。

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

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

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

4、編寫(xiě)接收方接收消息

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

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

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

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

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

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

5、編寫(xiě)發(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);
        // 更新商品表,收藏?cái)?shù)+1
        //storeService.updateStoreFavoriteUsersCountAdd1(storeId);
        // 發(fā)送消息 (交換機(jī)+綁定的key和發(fā)送的消息)
        try {
            rabbitTemplate.convertAndSend("addFavorite.direct","addFavorite.success",storeId);
        } catch (Exception e) {
            log.error("發(fā)送添加收藏消息失敗,店鋪id:{}",storeService,e);
        }
    }

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

“addFavorite.direct”:是交換機(jī)名稱(chēng),和接收方一致

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

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

6、小程序驗(yàn)證

點(diǎn)擊收藏。

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

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

三、寶塔中安裝RabbitMQ

1、下載erlang

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

安裝之前注意版本兼容問(wè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文件:

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

注意!注意!注意!

2、前往寶塔面板

進(jìn)入tmp目錄,將之前的rpm包放進(jìn)去。

3、安裝RabbitMQ

在軟件商店中安裝RabbitMQ

出現(xiàn)問(wèn)題:

看到報(bào)錯(cuò)日志,我又去下載報(bào)錯(cuò)日志里面的版本。

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

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

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

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

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

還是出現(xiàn)報(bào)錯(cuò):

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

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

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

寶塔安裝rabbitMQ實(shí)戰(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、運(yùn)行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容器了

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

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

在mq容器中打開(kāi)終端

列出所有可用的插件:

rabbitmq-plugins list

找到rabbitmq_management:

開(kāi)啟rabbitmq_management:

rabbitmq-plugins enable rabbitmq_management

然后再訪問(wèn)客戶端,成功訪問(wèn):

7、登錄RabbitMQ客戶端

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

參考博客:Docker RabbitMQ安裝

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

創(chuàng)建一個(gè)單獨(dú)的虛擬主機(jī)來(lái)進(jìn)行隔離,這里可以參考前面在虛擬機(jī)上的操作。

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

Stats in management UI are disabled on this node

可以參考這篇博客:

RabbitMQ客戶端界面問(wèn)題 

五、部署項(xiàng)目驗(yàn)證

參考我之前的:部署

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

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

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

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

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

去查看mq客戶端:

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

六、拓展使用

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

    Java對(duì)象的四種引用方式實(shí)例分析

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

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

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

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

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

    Springboot  jar包 idea 遠(yuǎn)程調(diào)試的操作過(guò)程

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

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

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

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

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

    SpringBoot超詳細(xì)深入講解底層原理

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

最新評(píng)論