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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

一、創(chuàng)建Springboot項目添加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ī)定在一個應(yīng)用里面必須唯一
    group: group1
    #消息發(fā)送的超時時間 默認3000ms
    send-message-timeout: 3000
    #消息達到4096字節(jié)的時候,消息就會被壓縮。默認 4096
    compress-message-body-threshold: 4096
    #最大的消息限制,默認為128K
    max-message-size: 4194304
    #同步消息發(fā)送失敗重試次數(shù)
    retry-times-when-send-failed: 3
    #在內(nèi)部發(fā)送失敗時是否重試其他代理,這個參數(shù)在有多個broker時才生效
    retry-next-server: true
    #異步消息發(fā)送失敗重試的次數(shù)
    retry-times-when-send-async-failed: 3

三、新建一個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;
/**
 * 模擬兩個訂單發(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 用來計算決定消息發(fā)送到哪個消息隊列, 一般是訂單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)建消費端監(jiān)聽消息消費消息

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;
/**
 * 消費順序消息
 * 配置RocketMQ監(jiān)聽
 *
 * ConsumeMode.ORDERLY:順序消費
 * @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 順序消費,收到消息:"+s);
    }
}

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

測試成功!

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

相關(guān)文章

  • spring初始化方法的執(zhí)行順序及其原理分析

    spring初始化方法的執(zhí)行順序及其原理分析

    這篇文章主要介紹了spring初始化方法的執(zhí)行順序及其原理分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Spring中的AOP原理與使用詳解

    Spring中的AOP原理與使用詳解

    這篇文章主要介紹了Spring中的AOP原理與使用詳解,AOP意為面向切面編程,可以通過預(yù)編譯方式或運行期動態(tài)代理實現(xiàn)在不修改源代碼的情況下給程序動態(tài)統(tǒng)一添加功能的一種技術(shù),需要的朋友可以參考下
    2023-12-12
  • Java實現(xiàn)一個簡易聊天室流程

    Java實現(xiàn)一個簡易聊天室流程

    這篇文章主要介紹了我的java課程設(shè)計一個多人聊天室(socket+多線程)本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-11-11
  • Java編程Webservice指定超時時間代碼詳解

    Java編程Webservice指定超時時間代碼詳解

    這篇文章主要介紹了Java編程Webservice指定超時時間代碼詳解,簡單介紹了webservice,然后分享了通過使用JDK對Webservice的支持進行Webservice調(diào)用實現(xiàn)指定超時時間完整示例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-11-11
  • 詳解Java如何實現(xiàn)圖像灰度化

    詳解Java如何實現(xiàn)圖像灰度化

    這篇文章主要介紹了灰度化的幾種方法,以及如何使用Java實現(xiàn)灰度化。同時分析了網(wǎng)上一種常見卻并不妥當?shù)腏ava灰度化實現(xiàn),以及證明了opencv的灰度化是使用“加權(quán)灰度化”法,下面一起來看看。
    2016-08-08
  • Java中對AtomicInteger和int值在多線程下遞增操作的測試

    Java中對AtomicInteger和int值在多線程下遞增操作的測試

    這篇文章主要介紹了Java中對AtomicInteger和int值在多線程下遞增操作的測試,本文得出AtomicInteger操作 與 int操作的效率大致相差在50-80倍上下的結(jié)論,需要的朋友可以參考下
    2014-09-09
  • MyBatis學(xué)習(xí)教程(五)-實現(xiàn)關(guān)聯(lián)表查詢方法詳解

    MyBatis學(xué)習(xí)教程(五)-實現(xiàn)關(guān)聯(lián)表查詢方法詳解

    本文給大家介紹mybatis關(guān)聯(lián)查詢,包括一對一關(guān)聯(lián)查詢,一對多關(guān)聯(lián)查詢,代碼簡單易懂,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • Eclipse配置使用web.xml的方法

    Eclipse配置使用web.xml的方法

    這篇文章主要為大家詳細介紹了Eclipse配置使用web.xml的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • java中final與finally的使用介紹

    java中final與finally的使用介紹

    本篇文章介紹了,在java中final與finally的使用。需要的朋友參考下
    2013-04-04
  • Spring整合Struts2的兩種方法小結(jié)

    Spring整合Struts2的兩種方法小結(jié)

    下面小編就為大家?guī)硪黄猄pring整合Struts2的兩種方法小結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07

最新評論