Spring整合RocketMQ

一.使用步骤

1.导入依赖

<parent>
    <groupId> org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.5.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.apache.rocketmq</groupId>
        <artifactId>rocketmq-spring-boot-starter</artifactId>
         <version>2.2.1</version>
    </dependency>
 
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
</dependencies>

2.启动类

@SpringBootApplication
public class ApplicationStart {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationStart.class);
    }
}

3.yaml配置

这里的配置是针对2.2.1版本

rocketmq:
  name-server: 127.0.0.1:9876
  #生产者配置
  producer:
    #生产者组名字
    group: "service-producer"
    # 消息最大长度 默认 1024 * 1024 * 4 (4M)
    max-message-size: 4194304
    # 发送消息超时时间,默认 3000
    send-message-timeout: 3000
    # 发送消息失败重试次数,默认2
    retry-times-when-send-failed: 2
    # 异步消息发送失败重试次数
    retry-times-when-send-async-failed: 2
    #达到 4096 ,进行消息压缩
    compress-message-body-threshold: 4096
  consumer:
    #消费者名字
    group: "service-consumer"
    #批量拉取消息数量
    pull-batch-size: 10
    message-model: CLUSTERING
    selector-expression: "*"
server:
  port: 8081

4.生产者

@RestController
public class ProducerController {
    @Autowired
    private RocketMQTemplate mqTemplate;
    @RequestMapping("/send/{message}")
    public String sendMessage(@PathVariable("message") String message){
        // 创建一个消息
        Message<String> msg = MessageBuilder.withPayload(message).build();
        // 发消息
        mqTemplate.send("topic-test:tags-test",msg);
        return "发送成功";
    }
}

5.消费者

@Component
@RocketMQMessageListener(
    	//消费者的名字
        consumerGroup = "service-consumer",
    	//主题
        topic = "topic-test",
    	//tags
        selectorExpression = "tags-test",
        //消息消费模式:默认是CLUSTERING集群,还支持BROADCASTING广播
        messageModel = MessageModel.CLUSTERING)
//MessageExt:Message对象的子类
public class TestConsumer implements RocketMQListener<MessageExt> {

    @Override
    public void onMessage(MessageExt message) {
        //这里拿到的消息 message.getBody 是byte[]格式。
        if(message.getBody() == null ||message.getBody().length == 0)return;
		//拿到消息:如果发送的消息是字符串,那么需要把byte[]转为字符串
        String msg = new String(message.getBody(), StandardCharsets.UTF_8);
        System.out.println("收到消息:" + msg);
    }
}

二.一些生产者的消息发送方式

1.异步发送

    // 异步发送
        mqTemplate.asyncSend("topic-test:tags-test", message, new SendCallback() {
            @Override
            public void onSuccess(SendResult sendResult) {
                System.out.println(sendResult);
                System.out.println("发送成功");

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

2.延迟发送

在SpringBoot中发送RocketMQ延迟消息只需要设置一个延迟等级即可

  • api : public SendResult syncSend(String destination, Message<?> message, long timeout, int delayLevel) : delayLevel就是延迟等级
  // 延迟发送
  // 创建一个消息
 Message<String> msg = MessageBuilder.withPayload(message).build();
 mqTemplate.syncSend("topic-test:tags-test", msg, 2000, 3);
 return "发送成功";

这里设置的等级是 3,对应的是 10S,也就是10s之后,消费者就可以收到该消息了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值