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

Springboot詳細(xì)講解RocketMQ實(shí)現(xiàn)順序消息的發(fā)送與消費(fèi)流程

 更新時(shí)間:2022年06月23日 08:36:20   作者:12程序猿  
RocketMQ作為一款純java、分布式、隊(duì)列模型的開源消息中間件,支持事務(wù)消息、順序消息、批量消息、定時(shí)消息、消息回溯等,本篇我們了解如何實(shí)現(xiàn)順序消息的發(fā)送與消費(fèi)

如何實(shí)現(xiàn)順序消息? 需要程序保證發(fā)送和消費(fèi)的是同一個(gè) Queue

rocketmq默認(rèn)發(fā)送的消息是進(jìn)入多個(gè)消息隊(duì)列,然后消費(fèi)端多線程并發(fā)消費(fèi),所以默認(rèn)情況,不是順序消費(fèi)消息的;有時(shí)候,我們需要順序消費(fèi)一批消息,比如電商系統(tǒng) 訂單創(chuàng)建、支付、完成操作,需要順序執(zhí)行;

RocketMQTemplate給我們提供了SendOrderly方法(有多個(gè)重載),來實(shí)現(xiàn)發(fā)送順序消息;包括以下:

syncSendOrderly,發(fā)送同步順序消息;

asyncSendOrderly,發(fā)送異步順序消息;

sendOneWayOrderly,發(fā)送單向順序消息;

一般我們用syncSendOrderly方法發(fā)送同步順序消息。

參數(shù)一:topic 如果想添加tag,可以使用"topic:tag"的寫法

參數(shù)二:消息內(nèi)容

參數(shù)三:hashKey 使用此參數(shù)選擇隊(duì)列。 例如:orderId,productId…

因?yàn)閎roker會管理多個(gè)消息隊(duì)列,這個(gè)hashKey參數(shù),主要用來計(jì)算選擇隊(duì)列的,一般可以把訂單ID,產(chǎn)品ID作為參數(shù)值;發(fā)送到一個(gè)隊(duì)列,這樣方便搞順序隊(duì)列;以及消費(fèi)端接收的時(shí)候,默認(rèn)是并發(fā)多線程去接收消息。

RocketMQMessageListener有個(gè)屬性consumeMode,默認(rèn)是ConsumeMode.CONCURRENTLY ,我們要改成ConsumeMode.ORDERLY,單線程順序接收消息;

下面來介紹下 springboot+rockermq 整合實(shí)現(xiàn) 順序消息的發(fā)送與消費(fèi)

一、創(chuàng)建Springboot項(xiàng)目添加rockermq依賴

<!--rocketMq依賴-->
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-spring-boot-starter</artifactId>
    <version>2.2.1</version>
</dependency>

二、配置rocketmq

# 端口
server:
  port: 8083

# 配置 rocketmq
rocketmq:
  name-server: 127.0.0.1:9876
  #生產(chǎn)者
  producer:
    #生產(chǎn)者組名,規(guī)定在一個(gè)應(yīng)用里面必須唯一
    group: group1
    #消息發(fā)送的超時(shí)時(shí)間 默認(rèn)3000ms
    send-message-timeout: 3000
    #消息達(dá)到4096字節(jié)的時(shí)候,消息就會被壓縮。默認(rèn) 4096
    compress-message-body-threshold: 4096
    #最大的消息限制,默認(rèn)為128K
    max-message-size: 4194304
    #同步消息發(fā)送失敗重試次數(shù)
    retry-times-when-send-failed: 3
    #在內(nèi)部發(fā)送失敗時(shí)是否重試其他代理,這個(gè)參數(shù)在有多個(gè)broker時(shí)才生效
    retry-next-server: true
    #異步消息發(fā)送失敗重試的次數(shù)
    retry-times-when-send-async-failed: 3

三、新建一個(gè)controller來做消息發(fā)送

package com.example.springbootrocketdemo.controller;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * 模擬兩個(gè)訂單發(fā)送消息
 *
 * 順序信息的三種方式:同步、異步、單向
 * syncSendOrderly,發(fā)送同步順序消息;
 * asyncSendOrderly,發(fā)送異步順序消息;
 * sendOneWayOrderly,發(fā)送單向順序消息;
 * 一般我們用第一種發(fā)送同步順序消息;
 * @author qzz
 */
@RestController
public class RocketMQOrderCOntroller {
    @Autowired
    private RocketMQTemplate rocketMQTemplate;
    /**
     * 發(fā)送同步順序消息
     */
    @RequestMapping("/testSyncOrderSend")
    public void testSyncSend(){
        //參數(shù)一:topic   如果想添加tag,可以使用"topic:tag"的寫法
        //參數(shù)二:消息內(nèi)容
        //參數(shù)三:hashKey 用來計(jì)算決定消息發(fā)送到哪個(gè)消息隊(duì)列, 一般是訂單ID,產(chǎn)品ID等
        rocketMQTemplate.syncSendOrderly("test-topic-orderly","111111創(chuàng)建","111111");
        rocketMQTemplate.syncSendOrderly("test-topic-orderly","111111支付","111111");
        rocketMQTemplate.syncSendOrderly("test-topic-orderly","111111完成","111111");
        rocketMQTemplate.syncSendOrderly("test-topic-orderly","222222創(chuàng)建","222222");
        rocketMQTemplate.syncSendOrderly("test-topic-orderly","222222支付","222222");
        rocketMQTemplate.syncSendOrderly("test-topic-orderly","222222完成","222222");
    }
}

四、創(chuàng)建消費(fèi)端監(jiān)聽消息消費(fèi)消息

package com.example.springbootrocketdemo.config;
import org.apache.rocketmq.spring.annotation.ConsumeMode;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Service;
/**
 * 消費(fèi)順序消息
 * 配置RocketMQ監(jiān)聽
 *
 * ConsumeMode.ORDERLY:順序消費(fèi)
 * @author qzz
 */
@Service
@RocketMQMessageListener(consumerGroup = "test",topic = "test-topic-orderly",consumeMode = ConsumeMode.ORDERLY)
public class RocketMQCommonConsumerListener implements RocketMQListener<String> {
    @Override
    public void onMessage(String s) {
        System.out.println("consumer 順序消費(fèi),收到消息:"+s);
    }
}

五、啟動服務(wù)測試順序消息發(fā)送與消費(fèi)

測試成功!

到此這篇關(guān)于Springboot詳細(xì)講解RocketMQ實(shí)現(xiàn)順序消息的發(fā)送與消費(fèi)流程的文章就介紹到這了,更多相關(guān)Springboot順序消息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyBatis-Plus枚舉和自定義主鍵ID的實(shí)現(xiàn)步驟

    MyBatis-Plus枚舉和自定義主鍵ID的實(shí)現(xiàn)步驟

    這篇文章主要給大家介紹了關(guān)于MyBatis-Plus枚舉和自定義主鍵ID的相關(guān)資料,文中通過實(shí)例代碼以及圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-02-02
  • java中LinkedList使用迭代器優(yōu)化移除批量元素原理

    java中LinkedList使用迭代器優(yōu)化移除批量元素原理

    本文主要介紹了java中LinkedList使用迭代器優(yōu)化移除批量元素原理,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • java如何讀取某個(gè)文件夾中的全部文件(包括子文件夾)

    java如何讀取某個(gè)文件夾中的全部文件(包括子文件夾)

    這篇文章主要介紹了java如何讀取某個(gè)文件夾中的全部文件(包括子文件夾),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 使用springboot自動配置源碼解讀

    使用springboot自動配置源碼解讀

    自動裝配是Spring Boot的一個(gè)核心特性,允許程序員在開發(fā)中更加專注于業(yè)務(wù)邏輯,而不是花費(fèi)大量的時(shí)間去配置和管理第三方組件,當(dāng)開發(fā)者在pom.xml文件中添加了某個(gè)依賴后,Spring Boot通過自動配置的方式,將這些第三方組件的實(shí)例自動注入到IOC容器中
    2024-11-11
  • Hibernate+JDBC實(shí)現(xiàn)批量插入、更新及刪除的方法詳解

    Hibernate+JDBC實(shí)現(xiàn)批量插入、更新及刪除的方法詳解

    這篇文章主要介紹了Hibernate+JDBC實(shí)現(xiàn)批量插入、更新及刪除的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Hibernate與JDBC針對數(shù)據(jù)庫的批量操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-11-11
  • Spring事務(wù)不生效的8種原因小結(jié)

    Spring事務(wù)不生效的8種原因小結(jié)

    Spring事務(wù)會在幾種特定的場景下失效,本文主要介紹了Spring事務(wù)不生效的8種原因小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Java中的時(shí)間日期API知識點(diǎn)總結(jié)

    Java中的時(shí)間日期API知識點(diǎn)總結(jié)

    本文給大家總結(jié)了Java中的時(shí)間日期API知識點(diǎn)以及相關(guān)的實(shí)例代碼分享,有興趣的朋友參考學(xué)習(xí)下。
    2018-04-04
  • SpringBoot中的@EnableConfigurationProperties注解原理及用法

    SpringBoot中的@EnableConfigurationProperties注解原理及用法

    在SpringBoot中,@EnableConfigurationProperties注解是一個(gè)非常有用的注解,它可以用于啟用對特定配置類的支持,在本文中,我們將深入探討@EnableConfigurationProperties注解,包括它的原理和如何使用,需要的朋友可以參考下
    2023-06-06
  • SpringBoot 搭建架構(gòu)5種方法示例詳解

    SpringBoot 搭建架構(gòu)5種方法示例詳解

    SpringBoot是基于Spring框架的便捷開發(fā)框架,通過約定優(yōu)于配置實(shí)現(xiàn)快速構(gòu)建獨(dú)立應(yīng)用,文章介紹了五種搭建SpringBoot項(xiàng)目的方法,包括使用IntelliJ IDEA、Spring官網(wǎng)、阿里云官網(wǎng)以及將現(xiàn)有Maven項(xiàng)目轉(zhuǎn)換為SpringBoot項(xiàng)目,感興趣的朋友跟隨小編一起看看吧
    2025-03-03
  • Java實(shí)現(xiàn)數(shù)據(jù)脫敏的方法詳細(xì)講解

    Java實(shí)現(xiàn)數(shù)據(jù)脫敏的方法詳細(xì)講解

    這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)數(shù)據(jù)脫敏的相關(guān)資料,數(shù)據(jù)脫敏是指對某些敏感信息通過脫敏規(guī)則進(jìn)行數(shù)據(jù)的變形,實(shí)現(xiàn)敏感隱私數(shù)據(jù)的可靠保護(hù),需要的朋友可以參考下
    2023-06-06

最新評論

泰兴市| 柞水县| 井陉县| 邢台市| 腾冲县| 鸡西市| 佳木斯市| 宁远县| 三亚市| 西吉县| 洞头县| 永安市| 阿拉善右旗| 喀什市| 无极县| 南木林县| 威远县| 龙门县| 项城市| 海安县| 宣化县| 宝鸡市| 祁东县| 甘南县| 灵武市| 若尔盖县| 洪湖市| 沭阳县| 旬邑县| 庐江县| 囊谦县| 琼海市| 陕西省| 康平县| 蒙山县| 清苑县| 延津县| 莫力| 连州市| 鄂尔多斯市| 客服|