【RocketMQ】SpringBoot集成RocketMQ

【RocketMQ】SpringBoot集成RocketMQ

1. 准备工作

1.1 引依赖

引入rocketmq依赖:

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

1.2 yml配置

rocketmq:
  name-server: 192.168.101.65:9876

2. API

参考文档:原生API

2.1 同步消息

生产者:

//同步消息
SendResult sendResult = rocketMQTemplate.syncSend("bootTestTopic", "我是一个boot消息");

消费者:

@Component
@RocketMQMessageListener(topic = "bootTestTopic", consumerGroup = "boot-test-consumer-group")
public class ABootSimpleMsgListener implements RocketMQListener<MessageExt> {
    
    


    /**
     * 没有报错,就签收
     * 如果没有报错,就是拒收 就会重试
     *
     * @param messageExt
     */
    @Override
    public void onMessage(MessageExt messageExt) {
    
    
        System.out.println(new String(messageExt.getBody()));
    }
}

2.2 异步消息

生产者:

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

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

2.3 单向消息

生产者:

//单向消息
rocketMQTemplate.sendOneWay("bootOnewayTopic", "我是一个单向消息");

2.4 延时消息

3000ms为连接mq的超时时间,延时等级为2.

//延迟消息
Message<String> msg = MessageBuilder.withPayload("我是一个延迟消息").build();
rocketMQTemplate.syncSend("bootMsTopic", msg, 3000, 2);

2.5 顺序消息

生产者:

//顺序消息,将一组消息投递到同一个队列,消费者单线程消费
List<MsgModel> msgModels = Arrays.asList(
        new MsgModel("1", 1, "下单"),
        new MsgModel("1", 1, "短信"),
        new MsgModel("1", 1, "物流"),
        new MsgModel("2", 2, "下单"),
        new MsgModel("2", 2, "短信"),
        new MsgModel("2", 2, "物流")
);

msgModels.forEach(msgModel -> {
    
    
    //发送一般都是以json的格式发送
    rocketMQTemplate.syncSendOrderly("bootOrderlyTopic", JSON.toJSONString(msgModel), msgModel.getOrderSn());
});

消费者:

@Component
@RocketMQMessageListener(topic = "bootOrderlyTopic",
        consumerGroup = "boot-orderly-consumer-group",
        consumeMode = ConsumeMode.ORDERLY,//消费模式-顺序模式
        maxReconsumeTimes = 5//消费重试次数
)
public class BOrderlyMsgListener implements RocketMQListener<MessageExt> {
    
    


    /**
     * 没有报错,就签收
     * 如果没有报错,就是拒收 就会重试
     *
     * @param messageExt
     */
    @Override
    public void onMessage(MessageExt messageExt) {
    
    
        MsgModel msgModel = JSON.parseObject(new String(messageExt.getBody()), MsgModel.class);
        System.out.println(msgModel);
    }
}

2.6 带tag的消息

生产者:

//topic:tag
rocketMQTemplate.syncSend("bootTagTopic:tagA", "我是一个带tag的消息");

消费者:

@Component
@RocketMQMessageListener(topic = "bootTagTopic",
        consumerGroup = "boot-tag-consumer-group",
        selectorType = SelectorType.TAG,//tah过滤模式
        selectorExpression = "tagA || tagB"
)
public class CTagMsgListener implements RocketMQListener<MessageExt> {
    
    


    /**
     * 没有报错,就签收
     * 如果没有报错,就是拒收 就会重试
     *
     * @param messageExt
     */
    @Override
    public void onMessage(MessageExt messageExt) {
    
    
        System.out.println(new String(messageExt.getBody()));
    }
}

2.7 带key的消息

生产者:

//key是携带在消息头上的
Message<String> message = MessageBuilder.withPayload("我是一个带key的消息")
        .setHeader(RocketMQHeaders.KEYS, "key")
        .build();
rocketMQTemplate.syncSend("bootKeyTopic", message);

消费者:

@Component
@RocketMQMessageListener(topic = "bootKeyTopic", consumerGroup = "boot-key-consumer-group")
public class DKeyMsgListener implements RocketMQListener<MessageExt> {
    
    


    /**
     * 没有报错,就签收
     * 如果没有报错,就是拒收 就会重试
     *
     * @param messageExt
     */
    @Override
    public void onMessage(MessageExt messageExt) {
    
    
        System.out.println(new String(messageExt.getBody())+"\tkey为:"+messageExt.getKeys());
    }
}

猜你喜欢

转载自blog.csdn.net/Decade_Faiz/article/details/131011270