SpringBoot3集成RocketMQ

引入依赖:

<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-spring-boot-starter</artifactId>
    <version>${rocketmq-spring-boot-starter.version}</version>
</dependency>

编辑配置文件,NameServer服务地址等,可以添加更多详细配置以满足具体业务需求,生产者组一般不关注,消费者组则需要保证组内订阅关系的一致性,可在创建消费者时配置,通常每个微服务只有一组消费者。

rocketmq:
  name-server: 192.168.101.128:9876
  producer:
    group: boot-producer-group

导入配置类,在SpringBoot3及其后续版本中,不会默认导入RocketMQ的配置类,可通过在启动类使用@Import导入或创建其配置类。

@Import(RocketMQAutoConfiguration.class)

生产者,通过RocketMQTemplate其API发送消息。

@Autowired
private RocketMQTemplate rocketMQTemplate;
@Test
void testProducer() {
    // 同步消息
    rocketMQTemplate.syncSend("bootTestTopic", "我是boot的同步消息");
    // 异步消息
    rocketMQTemplate.asyncSend("bootTestTopic", "我是boot的异步消息", new SendCallback() {
        @Override
        public void onSuccess(SendResult sendResult) {
            System.out.println("发送成功!");
        }
        @Override
        public void onException(Throwable throwable) {
            System.out.println("发送失败!");
        }
    });
    // 单向消息
    rocketMQTemplate.sendOneWay("bootTestTopic", "我是boot的单向消息");
    // 延迟消息,必须创建Message对象,延迟等级在发送参数中
    Message<String> message = MessageBuilder.withPayload("我是boot的延迟消息").build();
    rocketMQTemplate.syncSend("bootTestTopic", message, 3000, 3);
    // 顺序消息,在发送消息时通过参数直接传入hashKey,保证消息顺序在同一队列
    List<MsgModel> msgModels = Arrays.asList(
            new MsgModel("qwer", 1, "下单"),
            new MsgModel("qwer", 1, "短信"),
            new MsgModel("qwer", 1, "物流"),
            new MsgModel("zxcv", 2, "下单"),
            new MsgModel("zxcv", 2, "短信"),
            new MsgModel("zxcv", 2, "物流")
    );
    for (MsgModel msgModel : msgModels) {
        rocketMQTemplate.syncSendOrderly("bootTestTopic", JSON.toJSONString(msgModel), msgModel.getOrderNumber());
    }
    // 携带Tag的消息
    rocketMQTemplate.syncSend("bootTestTopic:tagA", "我是boot带tagA的消息");
    // 携带key的消息,key携带在消息头中
    Message<String> msg = MessageBuilder
            .withPayload("我是boot带key的消息")
            .setHeader(RocketMQHeaders.KEYS, "asfdsdghfjgh") // 携带key
            .build();
    rocketMQTemplate.syncSend("bootTestTopic:tagA", msg);
}

消费者,添加@Component和@RocketMQMessageListener注解,注解中指定消费者的具体配置,实现RocketMQListener接口,接口范型指定方法具体的参数类型,方法中对消息进行消费,方法没有报错消费成功,报错则重试消费。

@Component
@RocketMQMessageListener(
        topic = "bootTestTopic",
        consumerGroup = "boot-test-consumer-group", // 消费者组,组内订阅关系一致性
        consumeMode = ConsumeMode.CONCURRENTLY, // 消费模式,默认并发模式,消费顺序消息使用顺序模式
        maxReconsumeTimes = 5, // 消费重试次数
        selectorType = SelectorType.TAG, // 过滤类型,默认TAG
        selectorExpression = "tagA || tagB" // 过滤表达式,默认*全部
)
public class BootSimpleMsgListener implements RocketMQListener<MessageExt> {

    /**
     * 实现消费方法
     * 如果范型指定了固定类型的参数,那么消息体的内容就是该方法的参数
     * MessageExt是消息的所有内容
     * 方法没有报错消费成功,报错就会重试
     * @param message
     */
    @Override
    public void onMessage(MessageExt message) {
        System.out.println(message.getKeys()); // 获取key
        System.out.println(new String(message.getBody()));
    }
}

SpringBoot集成RocketMQ可以通过引入RocketMQ的相关依赖和配置来实现。在启动类中,需要添加@SpringBootApplication注解,并在main方法中调用SpringApplication.run方法来启动应用。同时,还需要在启动类中添加@ComponentScan注解来指定需要扫描的包路径。\[1\]\[2\] 在集成RocketMQ的应用中,可以创建一个消息控制器类,使用@RestController注解来标识该类为控制器类。在该类中,可以使用@Autowired注解来注入RocketMQTemplate对象,用于发送消息。通过@RequestMapping注解来定义接口路径和请求方法,可以在方法中调用rocketMQTemplate.convertAndSend方法来发送消息。\[3\] 需要注意的是,在使用RocketMQ的时候,还需要配置JmsConfig.TOPIC,即主题名,确保发送消息和消费消息的主题名一致。\[3\] 总结起来,SpringBoot集成RocketMQ的步骤包括引入依赖、配置启动类、创建消息控制器类和配置主题名。 #### 引用[.reference_title] - *1* *2* [Spring Boot整合Rocketmq](https://blog.csdn.net/qq_18603599/article/details/81172866)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Spring Boot集成RocketMq(一看就会)](https://blog.csdn.net/weixin_44039105/article/details/121755023)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值