SpringBoot3集成RocketMQ

引入依赖:


    org.apache.rocketmq
    rocketmq-spring-boot-starter
    ${rocketmq-spring-boot-starter.version}

编辑配置文件,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 message = MessageBuilder.withPayload("我是boot的延迟消息").build();
    rocketMQTemplate.syncSend("bootTestTopic", message, 3000, 3);
    // 顺序消息,在发送消息时通过参数直接传入hashKey,保证消息顺序在同一队列
    List 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 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是消息的所有内容
     * 方法没有报错消费成功,报错就会重试
     * @param message
     */
    @Override
    public void onMessage(MessageExt message) {
        System.out.println(message.getKeys()); // 获取key
        System.out.println(new String(message.getBody()));
    }
}

你可能感兴趣的:(中间件,rocketmq,java,springboot)