使用Spring Boot集成RocketMQ进行消息发送的示例

在现代微服务架构中,消息队列是实现异步通信、解耦和提高系统可靠性的重要组件之一。Apache RocketMQ是一款高性能、高可靠、分布式的消息中间件,适合处理大规模的消息传输需求。本文将介绍如何在Spring Boot项目中集成RocketMQ,并实现不同类型的消息发送。

项目配置

首先,在Spring Boot项目中添加RocketMQ的依赖。可以在pom.xml中添加以下依赖:

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

然后,在application.yml中配置RocketMQ的相关属性,例如NameServer地址:

rocketmq:
  name-server: 填你的服务器ip跟端口号
  producer:
    group: my-group

代码实现

在本文的示例中,我们将实现以下几种类型的消息发送:

  1. 同步消息
  2. 异步消息
  3. 单向消息
  4. 延迟消息
  5. 顺序消息

创建一个Spring Boot测试类来演示这些消息的发送:

package com.takumilove;

import com.alibaba.fastjson.JSON;
import com.takumilove.domain.Order;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.junit.jupiter.api.Test;
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 java.util.Arrays;
import java.util.Date;
import java.util.List;

@SpringBootTest
class BRocketmqBootPApplicationTests {

    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    @Test
    void contextLoads() {
        // 1. 同步消息
        rocketMQTemplate.syncSend("bootTestTopic", "我是boot的一个消息");

        // 2. 异步消息
        rocketMQTemplate.asyncSend("bootAsyncTestTopic", "我是boot的一个异步消息", new SendCallback() {
            @Override
            public void onSuccess(SendResult sendResult) {
                System.out.println("发送成功");
            }

            @Override
            public void onException(Throwable throwable) {
                System.out.println("发送失败");
            }
        });

        // 3. 单向消息
        rocketMQTemplate.sendOneWay("bootOnewayTopic", "单向消息");

        // 4. 延迟消息
        Message<String> msg = MessageBuilder.withPayload("延迟消息").build();
        rocketMQTemplate.syncSend("bootMsTopic", msg, 3000, 3);

        // 5. 顺序消息
        List<Order> orderList = Arrays.asList(
                new Order(1, 111, 59D, new Date(), "下订单"),
                new Order(2, 111, 59D, new Date(), "物流"),
                new Order(3, 111, 59D, new Date(), "签收"),
                new Order(4, 112, 89D, new Date(), "下订单"),
                new Order(5, 112, 89D, new Date(), "物流"),
                new Order(6, 112, 89D, new Date(), "拒收"));
        orderList.forEach(order -> {
            rocketMQTemplate.syncSendOrderly("bootOrderlyTopic", JSON.toJSONString(order),
                    String.valueOf(order.getOrderNumber()));
        });
    }
}

详细说明

  1. 同步消息:使用syncSend方法发送消息,发送成功后会返回一个SendResult对象。

  2. 异步消息:使用asyncSend方法发送消息,并通过回调函数处理发送结果。onSuccess方法在发送成功时被调用,onException方法在发送失败时被调用。

  3. 单向消息:使用sendOneWay方法发送单向消息,发送后不等待服务器回应。

  4. 延迟消息:使用syncSend方法并设置消息的延迟级别,消息会在指定延迟时间后被消费。

  5. 顺序消息:通过syncSendOrderly方法发送顺序消息,所有相同订单号的消息会被发送到同一个队列中,从而保证顺序性。

通过以上配置和代码示例,我们可以在Spring Boot项目中轻松集成RocketMQ,并实现不同类型的消息发送。这种集成方式可以帮助我们构建高性能、高可靠的分布式系统。

相关推荐

  1. 使用Spring Boot集成RocketMQ进行消息发送示例

    2024-07-17 05:42:04       24 阅读
  2. 使用 RocketMQ 实现消息顺序消费

    2024-07-17 05:42:04       26 阅读
  3. rocketMQ-发送消息

    2024-07-17 05:42:04       49 阅读
  4. 如何使用 RabbitMQ 进行消息发送和接收

    2024-07-17 05:42:04       41 阅读
  5. RockerMQ发送消息流程

    2024-07-17 05:42:04       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 05:42:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 05:42:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 05:42:04       58 阅读
  4. Python语言-面向对象

    2024-07-17 05:42:04       69 阅读

热门阅读

  1. 量化机器人在不同市场环境下的表现

    2024-07-17 05:42:04       22 阅读
  2. 微信小程序:2.全局开发

    2024-07-17 05:42:04       26 阅读
  3. DRF分页器(Django Restful Framework)

    2024-07-17 05:42:04       29 阅读
  4. 速盾:DDOS攻击能使用高防CDN防御吗?

    2024-07-17 05:42:04       22 阅读
  5. 面试题 29. 顺时针打印矩阵

    2024-07-17 05:42:04       24 阅读
  6. 【python】运用Request库实现爬虫

    2024-07-17 05:42:04       22 阅读
  7. opencv—常用函数学习_“干货“_9

    2024-07-17 05:42:04       32 阅读
  8. 掌握Conda配置:如何禁用Base环境的自动激活

    2024-07-17 05:42:04       22 阅读
  9. volatile的应用

    2024-07-17 05:42:04       23 阅读
  10. MySQL 分库分表

    2024-07-17 05:42:04       26 阅读
  11. C# 文件上传总结

    2024-07-17 05:42:04       24 阅读