最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring?boot項(xiàng)目中集成rocketmq詳細(xì)步驟

 更新時(shí)間:2023年09月13日 09:07:39   作者:orton777  
這篇文章主要給大家介紹了關(guān)于spring?boot項(xiàng)目中集成rocketmq的相關(guān)資料,springboot集成rocketmq的方法非常簡單,文中直接上代碼,需要的朋友可以參考下

集成Spring Boot和RocketMQ

在現(xiàn)代的微服務(wù)架構(gòu)中,消息隊(duì)列已經(jīng)成為一種常見的異步處理模式,它能解決服務(wù)間的同步調(diào)用、耦合度高、流量高峰等問題。RocketMQ是阿里巴巴開源的一款消息中間件,性能優(yōu)秀,功能齊全,被廣泛應(yīng)用在各種業(yè)務(wù)場景。

本文將詳細(xì)介紹如何在Spring Boot項(xiàng)目中集成RocketMQ,實(shí)現(xiàn)消息的生產(chǎn)和消費(fèi)。

開發(fā)環(huán)境

  • JDK 1.8 或更高
  • RocketMQ 4.8.0 或更高
  • Spring Boot 2.3.1.RELEASE 或更高
  • Maven 3.0 或更高

RocketMQ服務(wù)器部署

首先,我們需要在本地或服務(wù)器上部署RocketMQ。具體的部署步驟可以參考RocketMQ官方文檔。為了簡化部署,我們可以使用Docker進(jìn)行部署。

Spring Boot項(xiàng)目創(chuàng)建

我們使用Spring Initializr創(chuàng)建一個(gè)新的Spring Boot項(xiàng)目,選擇Web、Lombok和RocketMQ Spring Boot Starter為項(xiàng)目依賴。

pom.xml示例:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.rocketmq</groupId>
        <artifactId>rocketmq-spring-boot-starter</artifactId>
        <version>2.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
</dependencies>

配置RocketMQ

application.properties文件中配置RocketMQ的服務(wù)器地址和其他相關(guān)參數(shù)。

rocketmq.name-server=127.0.0.1:9876
rocketmq.producer.group=my-group

在這里,rocketmq.name-server是RocketMQ服務(wù)器的地址,rocketmq.producer.group是生產(chǎn)者的組名。

消息生產(chǎn)者

接下來,我們創(chuàng)建一個(gè)消息生產(chǎn)者。在Spring Boot項(xiàng)目中,我們可以使用RocketMQTemplate來發(fā)送消息。

import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProducerController {
    @Autowired
    private RocketMQTemplate rocketMQTemplate;
    @GetMapping("/send")
    public String send(String message) {
        rocketMQTemplate.convertAndSend("test-topic", message);
        return "Message: '" + message + "' sent.";
    }
}

上述代碼中,我們創(chuàng)建了一個(gè)RESTful接口/send,當(dāng)接口被調(diào)用時(shí),它將發(fā)送一個(gè)消息到test-topic主題。

消息消費(fèi)者

接下來,我們創(chuàng)建一個(gè)消息消費(fèi)者。在Spring Boot項(xiàng)目中,我們可以使用@RocketMQMessageListener注解來定義一個(gè)消息消費(fèi)者。

import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Service;
@Service
@RocketMQMessageListener(topic = "test-topic", consumerGroup = "my-consumer_test-topic")
public class ConsumerService implements RocketMQListener<String> {
    @Override
    public void onMessage(String message) {
        System.out.printf("------- StringConsumer received: %s \n", message);
    }
}

上述代碼中,我們定義了一個(gè)消息消費(fèi)者,它將監(jiān)聽test-topic主題的消息,當(dāng)有新的消息時(shí),它將打印消息內(nèi)容。

測試

至此,我們已經(jīng)完成了Spring Boot集成RocketMQ的所有代碼。接下來,我們就可以運(yùn)行Spring Boot項(xiàng)目,并通過訪問/send接口來發(fā)送消息,查看控制臺(tái)的輸出來驗(yàn)證消息消費(fèi)者是否可以正常接收消息。

這就是Spring Boot集成RocketMQ的全過程。RocketMQ作為一款功能強(qiáng)大的消息中間件,不僅支持基本的消息生產(chǎn)和消費(fèi),還支持許多高級(jí)特性,如事務(wù)消息、順序消息、延遲消息等。在實(shí)際的項(xiàng)目開發(fā)中,我們可以根據(jù)業(yè)務(wù)需求選擇合適的消息模型,提高系統(tǒng)的可用性和可靠性。

事務(wù)消息

RocketMQ支持發(fā)送事務(wù)消息,也就是說,在發(fā)送消息的同時(shí),我們可以執(zhí)行本地的數(shù)據(jù)庫操作,只有當(dāng)本地的數(shù)據(jù)庫操作成功時(shí),消息才會(huì)真正被發(fā)送出去。

下面是一個(gè)發(fā)送事務(wù)消息的例子:

import org.apache.rocketmq.client.producer.TransactionListener;
import org.apache.rocketmq.client.producer.TransactionMQProducer;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.*;
@RestController
public class TransactionProducerController {
    @Autowired
    private RocketMQTemplate rocketMQTemplate;
    @GetMapping("/sendTransaction")
    public String sendTransaction(String message) {
        ExecutorService executor = new ThreadPoolExecutor(5, 10, 200, TimeUnit.MILLISECONDS,
                new ArrayBlockingQueue<>(5000), r -> {
            Thread thread = new Thread(r);
            thread.setName("client-transaction-msg-check-thread");
            return thread;
        });
        TransactionListener transactionListener = new TransactionListenerImpl();
        TransactionMQProducer producer = rocketMQTemplate.createAndStartTransactionMQProducer("transaction-group",transactionListener,executor);
        producer.sendMessageInTransaction("test-topic", "TagA", message, null);
        return "Transaction Message: '" + message + "' sent.";
    }
}

在上述代碼中,我們創(chuàng)建了一個(gè)TransactionMQProducer,并設(shè)置了一個(gè)TransactionListener來處理事務(wù)的提交和回滾。當(dāng)發(fā)送事務(wù)消息時(shí),我們需要調(diào)用sendMessageInTransaction方法。

順序消息

RocketMQ支持發(fā)送順序消息,也就是說,消息會(huì)按照發(fā)送的順序被消費(fèi)。

下面是一個(gè)發(fā)送順序消息的例子:

import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.messaging.support.MessageBuilder;
@RestController
public class OrderlyProducerController {
    @Autowired
    private RocketMQTemplate rocketMQTemplate;
    @GetMapping("/sendOrderly")
    public String sendOrderly(String message) {
        for (int i = 0; i < 100; i++) {
            rocketMQTemplate.syncSendOrderly("orderly_topic", MessageBuilder.withPayload(message + i).build(), "hashkey");
        }
        return "Orderly Message: '" + message + "' sent.";
    }
}

在上述代碼中,我們調(diào)用syncSendOrderly方法發(fā)送順序消息。該方法的第三個(gè)參數(shù)是hashkey,RocketMQ會(huì)根據(jù)這個(gè)key來決定消息發(fā)送到哪個(gè)隊(duì)列,具有相同hashkey的消息會(huì)發(fā)送到同一個(gè)隊(duì)列。

延遲消息

RocketMQ支持發(fā)送延遲消息,也就是說,消息不會(huì)立即被消費(fèi),而是會(huì)在指定的時(shí)間后被消費(fèi)。

下面是一個(gè)發(fā)送延遲消息的例子:

import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.messaging.support.MessageBuilder;
@RestController
public class DelayProducerController {
    @Autowired
    private RocketMQTemplate rocketMQTemplate;
    @GetMapping("/sendDelay")
    public String sendDelay(String message) {
        rocketMQTemplate.syncSend("delay_topic", MessageBuilder.withPayload(message).build(), 1000, 4);
        return "Delay Message: '" + message + "' sent.";
    }
}

在上述代碼中,我們調(diào)用syncSend方法發(fā)送延遲消息。該方法的第三個(gè)參數(shù)是延遲時(shí)間,第四個(gè)參數(shù)是延遲級(jí)別。

總結(jié)

到此這篇關(guān)于spring boot項(xiàng)目中集成rocketmq詳細(xì)步驟的文章就介紹到這了,更多相關(guān)springboot集成rocketmq內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的CountDownLatch源碼解析

    Java中的CountDownLatch源碼解析

    這篇文章主要介紹了Java中的CountDownLatch源碼解析,CountDownLatch類是一個(gè)同步輔助裝置,允許一個(gè)或多個(gè)線程去等待直到另外的線程完成了一組操作,需要的朋友可以參考下
    2023-12-12
  • Spring 源碼解析CommonAnnotationBeanPostProcessor

    Spring 源碼解析CommonAnnotationBeanPostProcessor

    這篇文章主要為大家介紹了Spring 源碼解析CommonAnnotationBeanPostProcessor示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • SpringMVC攔截器運(yùn)行原理及配置詳解

    SpringMVC攔截器運(yùn)行原理及配置詳解

    這篇文章主要介紹了SpringMVC攔截器運(yùn)行原理及配置詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • JAVAEE Filter 過濾器設(shè)置是否緩存實(shí)例詳解

    JAVAEE Filter 過濾器設(shè)置是否緩存實(shí)例詳解

    網(wǎng)頁中,每次的客戶端訪問服務(wù)器,有部分不用重復(fù)請(qǐng)求的,這樣可以減輕服務(wù)器的工作量。那么如何設(shè)置客戶端是否都緩存呢?接下來通過本文給大家介紹JAVAEE Filter 過濾器設(shè)置是否緩存的實(shí)例,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • Fluent Mybatis快速入門詳細(xì)教程

    Fluent Mybatis快速入門詳細(xì)教程

    由于FluentMybatis是基于mybatis上做封裝和擴(kuò)展的,所以這里主要聊聊mybatis處理的方式,以及給出FluentMybatis的解放方案。對(duì)Fluent Mybatis入門相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-08-08
  • Java中獲取webapp路徑問題詳解

    Java中獲取webapp路徑問題詳解

    這篇文章主要介紹了Java中獲取webapp路徑問題詳解,WebApp是指基于Web的?系統(tǒng)和?應(yīng)用,其作用是向廣大的最終用戶發(fā)布一組復(fù)雜的內(nèi)容和功能,本文詳解了關(guān)于獲取路徑時(shí)候可能出現(xiàn)的問題,需要的朋友可以參考下
    2023-07-07
  • SpringCloud 2020-Ribbon負(fù)載均衡服務(wù)調(diào)用的實(shí)現(xiàn)

    SpringCloud 2020-Ribbon負(fù)載均衡服務(wù)調(diào)用的實(shí)現(xiàn)

    這篇文章主要介紹了SpringCloud 2020-Ribbon負(fù)載均衡服務(wù)調(diào)用的實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Idea如何導(dǎo)入一個(gè)SpringBoot項(xiàng)目的方法(圖文教程)

    Idea如何導(dǎo)入一個(gè)SpringBoot項(xiàng)目的方法(圖文教程)

    這篇文章主要介紹了Idea如何導(dǎo)入一個(gè)SpringBoot項(xiàng)目的方法(圖文教程),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • SpringBoot3實(shí)現(xiàn)數(shù)據(jù)備份操作的多種方法全解析

    SpringBoot3實(shí)現(xiàn)數(shù)據(jù)備份操作的多種方法全解析

    在當(dāng)今數(shù)字化時(shí)代,數(shù)據(jù)已然成為企業(yè)最為寶貴的資產(chǎn)之一,Spring Boot 3 作為一款廣受歡迎的 Java 開發(fā)框架,為我們實(shí)現(xiàn)高效、可靠的數(shù)據(jù)備份操作提供了豐富的工具與便捷的方式,下面我們就來看看具體實(shí)現(xiàn)方法吧
    2025-12-12
  • Java并發(fā)編程總結(jié)——慎用CAS詳解

    Java并發(fā)編程總結(jié)——慎用CAS詳解

    下面小編就為大家?guī)硪黄狫ava并發(fā)編程總結(jié)——慎用CAS詳解。小編覺得挺不錯(cuò)的, 現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06

最新評(píng)論

常熟市| 陇川县| 全椒县| 新巴尔虎右旗| 张家界市| 虎林市| 双鸭山市| 平遥县| 平遥县| 梁平县| 华安县| 玉环县| 岫岩| 攀枝花市| 靖宇县| 胶南市| 深水埗区| 封开县| 青河县| 英德市| 神池县| 长葛市| 石屏县| 乌海市| 常州市| 土默特右旗| 新昌县| 浦县| 水城县| 丹棱县| 皋兰县| 乌拉特中旗| 高碑店市| 金山区| 怀远县| 库伦旗| 临武县| 东安县| 渭源县| 杂多县| 衡南县|