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

SpringBoot集成RocketMQ的使用示例

 更新時間:2023年11月20日 09:26:57   作者:小月亮與六便士  
RocketMQ是阿里巴巴開源的一款消息中間件,性能優(yōu)秀,功能齊全,被廣泛應(yīng)用在各種業(yè)務(wù)場景,本文就來介紹一下SpringBoot集成RocketMQ的使用示例,感興趣的可以了解一下

一、RocketMQ基本概念

消息模型(Message Model)

RocketMQ主要由Producer、Broker、Consumer三部分組成,其中Producer負責(zé)生產(chǎn)消息,Consumer負責(zé)消費消息,Broker負責(zé)存儲消息。Broker在實際部署過程中對應(yīng)一臺服務(wù)器,每個Broker可以存儲多個Topic的消息,每個Topic的消息也可以分片存儲于不同的Broker。MessageQueue用于存儲消息的物理地址,每個Topic中的消息地址存儲于多個MessageQueue中。ConsumerGroup由多個Consumer實例構(gòu)成。

1、在springBoot項目中添加Maven依賴 

        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
            <version>2.0.4</version>
        </dependency>

2、添加配置:

application.yml 文件中添加如下配置:

rocketmq:
  name-server: 192.168.152.165:9876
  producer:
    group: my-group

SpringBoot 集成 RocketMQ代碼:

生產(chǎn)者: 消息發(fā)送的三種方式

package com.rocketmq.springbootrocketmq;


import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.concurrent.TimeUnit;


@RunWith(SpringRunner.class)
@SpringBootTest
public class T {


    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    //同步消息
    @Test
    public void testRocketMQ() {
        Message msg = MessageBuilder.withPayload("boot發(fā)送同步消息").build();
        rocketMQTemplate.send("helloTopicBoot", msg);
        System.out.println("success send");
    }

    //異步消息
    @Test
    public void sendASYCMsg() throws InterruptedException {
        Message message = MessageBuilder.withPayload("boot發(fā)送異步消息").build();
        rocketMQTemplate.asyncSend("helloTopicBoot", message, new SendCallback() {
            @Override
            public void onSuccess(SendResult sendResult) {
                System.out.println("發(fā)送狀態(tài):"+sendResult.getSendStatus());
            }

            @Override
            public void onException(Throwable throwable) {
                System.out.println("消息發(fā)送失敗");
            }
        });
        TimeUnit.SECONDS.sleep(5);
    }

    //一次性消息
    @Test
    public void sendOneWayRocketMQ() {
        Message msg = MessageBuilder.withPayload("boot發(fā)送一次性消息").build();
        rocketMQTemplate.sendOneWay("helloTopicBoot", msg);
    }

}

消費者:

package com.example.springbooTRocketMQConsumer.listener;

import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;

import java.nio.charset.Charset;

@Component
@RocketMQMessageListener(consumerGroup = "htbConsumerGroup",topic = "helloTopicBoot")
public class HelloTopicListener implements RocketMQListener<MessageExt> {

    @Override
    public void onMessage(MessageExt messageExt) {
        System.out.println("success get:"+new String(messageExt.getBody(), Charset.defaultCharset()));
    }
}

消息消費的兩種模式

集群模式:默認模式

廣播模式:

消費者:messageModel = MessageModel.BROADCASTING

package com.example.springbooTRocketMQConsumer.listener;

import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.MessageModel;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;

import java.nio.charset.Charset;

@Component
@RocketMQMessageListener(consumerGroup = "htbConsumerGroup",topic = "helloTopicBoot",messageModel = MessageModel.BROADCASTING)
public class HelloTopicListener implements RocketMQListener<MessageExt> {

    @Override
    public void onMessage(MessageExt messageExt) {
        System.out.println("success get:"+new String(messageExt.getBody(), Charset.defaultCharset()));
    }
}

順序消息

生產(chǎn)者:

    //順序消息
    @Test
    public void sendOrderlyMsg(){
        //設(shè)置隊列選擇器
        rocketMQTemplate.setMessageQueueSelector(new MessageQueueSelector() {
            @Override
            public MessageQueue select(List<MessageQueue> list, org.apache.rocketmq.common.message.Message message, Object o) {
                String orderIdStr = (String) o;
                long orderId = Long.parseLong(orderIdStr);
                int index = (int)orderId % list.size();
                return list.get(index);
            }
        });

        List<OrderStep> orderSteps = OrderUtil.buildOrders();
        for (OrderStep orderStep : orderSteps) {
            Message msg = MessageBuilder.withPayload(orderStep.toString()).build();
            rocketMQTemplate.sendOneWayOrderly("orderlyTopicBoot",msg,String.valueOf(orderStep.getOrderId()));

        }
    }

消費者:

package com.example.springbooTRocketMQConsumer.listener;

import org.apache.rocketmq.common.message.MessageExt;
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.Component;

import java.nio.charset.Charset;

@Component
@RocketMQMessageListener(consumerGroup = "orderlyConsumerBoot",topic = "orderlyTopicBoot",consumeMode = ConsumeMode.ORDERLY)
public class OrderlyTopicListener implements RocketMQListener<MessageExt> {

    @Override
    public void onMessage(MessageExt messageExt) {
        System.out.println("當前線程:" + Thread.currentThread() + "隊列ID"+messageExt.getQueueId() + ",消息內(nèi)容:" + new String(messageExt.getBody(),Charset.defaultCharset()));
    }
}

延遲消息

生產(chǎn)者:

    //延遲消息
    @Test
    public void sendDelayRocketMQ() {
        Message msg = MessageBuilder.withPayload("boot發(fā)送延時消息,發(fā)送時間:"+new Date()).build();
        rocketMQTemplate.syncSend("helloTopicBoot", msg,3000,3);
    }

消費者:

package com.example.springbooTRocketMQConsumer.listener;

import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.MessageModel;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;

import java.nio.charset.Charset;
import java.util.Date;

@Component
@RocketMQMessageListener(consumerGroup = "htbConsumerGroup",topic = "helloTopicBoot")
public class DelayTopicListener implements RocketMQListener<MessageExt> {

    @Override
    public void onMessage(MessageExt messageExt) {
        System.out.println("success get:發(fā)送時間"+new Date()+new String(messageExt.getBody(), Charset.defaultCharset()));
    }
}

消息Tag條件過濾

生成者

    //Tag消息
    @Test
    public void sendTagFilterRocketMQ() {
        Message msg1 = MessageBuilder.withPayload("消息A").build();
        rocketMQTemplate.sendOneWay("tagFilterBoot:TagA", msg1);
        Message msg2 = MessageBuilder.withPayload("消息B").build();
        rocketMQTemplate.sendOneWay("tagFilterBoot:TagB", msg2);
        Message msg3 = MessageBuilder.withPayload("消息C").build();
        rocketMQTemplate.sendOneWay("tagFilterBoot:TagC", msg3);
    }

消費者:

package com.example.springbooTRocketMQConsumer.listener;

import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.MessageModel;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;

import java.nio.charset.Charset;
import java.util.Date;

@Component
@RocketMQMessageListener(consumerGroup = "tagFilterGroupBoot",topic = "tagFilterBoot",selectorExpression = "TagA || TagC")
public class TagFilterTopicListener implements RocketMQListener<MessageExt> {

    @Override
    public void onMessage(MessageExt messageExt) {
        System.out.println("success get:發(fā)送時間"+new Date()+new String(messageExt.getBody(), Charset.defaultCharset()));
    }
}

SQL92消息過濾

生產(chǎn)者:

    //SQL92消息
    @Test
    public void sendSQL92FilterRocketMQ() {
        Message msg1 = MessageBuilder.withPayload("小紅,年齡22,體重45").setHeader("age","22").setHeader("weight",45).build();
        rocketMQTemplate.sendOneWay("SQL92FilterBoot", msg1);
        Message msg2 = MessageBuilder.withPayload("小明,年齡25,體重60").setHeader("age","25").setHeader("weight",60).build();
        rocketMQTemplate.sendOneWay("SQL92FilterBoot", msg2);
        Message msg3 = MessageBuilder.withPayload("小藍,年齡40,體重70").setHeader("age","40").setHeader("weight",70).build();
        rocketMQTemplate.sendOneWay("SQL92FilterBoot", msg3);
    }

消費者:

package com.example.springbooTRocketMQConsumer.listener;

import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.annotation.SelectorType;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;

import java.nio.charset.Charset;
import java.util.Date;

@Component
@RocketMQMessageListener(consumerGroup = "SQL92FilterGroupBoot",topic = "SQL92FilterBoot",selectorType = SelectorType.SQL92,selectorExpression = "age > 23 and weight > 60")
public class SQL92FilterTopicListener implements RocketMQListener<MessageExt> {

    @Override
    public void onMessage(MessageExt messageExt) {
        System.out.println("success get:發(fā)送時間"+new Date()+new String(messageExt.getBody(), Charset.defaultCharset()));
    }
}

 到此這篇關(guān)于SpringBoot集成RocketMQ的使用示例的文章就介紹到這了,更多相關(guān)SpringBoot集成RocketMQ內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot 集成 RocketMQ 全流程指南(從依賴引入到消息收發(fā))

    Spring Boot 集成 RocketMQ 全流程指南(從依賴引入到消息收發(fā)

    本文將通過 手動連接 和 配置連接 兩種方式,詳細講解如何在 Spring Boot 中集成 RocketMQ,實現(xiàn)消息的同步與異步發(fā)送,并提供完整示例代碼,感興趣的朋友一起看看吧
    2025-04-04
  • MyBatisPlus報錯:Failed to process,please exclude the tableName or statementId問題

    MyBatisPlus報錯:Failed to process,please exclud

    這篇文章主要介紹了MyBatisPlus報錯:Failed to process,please exclude the tableName or statementId問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Mybatis一對多關(guān)聯(lián)關(guān)系映射實現(xiàn)過程解析

    Mybatis一對多關(guān)聯(lián)關(guān)系映射實現(xiàn)過程解析

    這篇文章主要介紹了Mybatis一對多關(guān)聯(lián)關(guān)系映射實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • SpringCloud GateWay動態(tài)路由用法

    SpringCloud GateWay動態(tài)路由用法

    網(wǎng)關(guān)作為所有項目的入口,不希望重啟,因此動態(tài)路由是必須的,動態(tài)路由主要通過RouteDefinitionRepository接口實現(xiàn),其默認的實現(xiàn)是InMemoryRouteDefinitionRepository,即在內(nèi)存中存儲路由配置,可基于這個map對象操作,動態(tài)路由的實現(xiàn)方案有兩種
    2024-10-10
  • 如何查找YUM安裝的JAVA_HOME環(huán)境變量詳解

    如何查找YUM安裝的JAVA_HOME環(huán)境變量詳解

    這篇文章主要給大家介紹了關(guān)于如何查找YUM安裝的JAVA_HOME環(huán)境變量的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • Java中Function的使用及說明

    Java中Function的使用及說明

    這篇文章主要介紹了Java中Function的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • SpringBoot實現(xiàn)熱部署Community的示例代碼

    SpringBoot實現(xiàn)熱部署Community的示例代碼

    本文主要介紹了SpringBoot實現(xiàn)熱部署Community的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java 類在 Tomcat 中是如何加載的(過程分析)

    Java 類在 Tomcat 中是如何加載的(過程分析)

    這篇文章主要介紹了Java 類在 Tomcat 中是如何加載的過程分析,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot實現(xiàn)異步事件Event詳解

    SpringBoot實現(xiàn)異步事件Event詳解

    這篇文章主要介紹了SpringBoot實現(xiàn)異步事件Event詳解,異步事件的模式,通常將一些非主要的業(yè)務(wù)放在監(jiān)聽器中執(zhí)行,因為監(jiān)聽器中存在失敗的風(fēng)險,所以使用的時候需要注意,需要的朋友可以參考下
    2023-11-11
  • RabbitMQ中的Channel和Exchange詳解

    RabbitMQ中的Channel和Exchange詳解

    這篇文章主要介紹了RabbitMQ中的Channel和Exchange詳解,創(chuàng)建和銷毀TCP連接很耗時,打開太多TCP連接,耗操作系統(tǒng)資源,并發(fā)量大到一定程度,系統(tǒng)的吞吐量會降低,使用一個connection多channel的方式,可以提升連接的利用率,需要的朋友可以參考下
    2023-08-08

最新評論

黄山市| 仙居县| 南丰县| 广德县| 乃东县| 修文县| 瓮安县| 吴桥县| 河西区| 哈密市| 旬邑县| 金平| 新余市| 漳州市| 连江县| 法库县| 手机| 仁化县| 乐安县| 区。| 南宫市| 京山县| 安平县| 眉山市| 惠水县| 鄂尔多斯市| 赤水市| 乌海市| 双牌县| 潼关县| 绥中县| 博罗县| 万载县| 榆林市| 科技| 铜山县| 广元市| 柞水县| 娱乐| 镶黄旗| 淮北市|