javaee互联网轻量级框架整合开发_SpringBoot 整合 RocketMQ 如何实现消息生产消费?...

v2-842ac5556db70d3123c00c56b4cacfae_1440w.jpg?source=172ae18b

有时候我们在使用消息队列的时候,往往需要能够保证消息的顺序消费,而RocketMQ是可以支持消息的顺序消费的。


RocketMQ在发送消息的时候,是将消息发送到不同的队列中,然后消费端从多个队列中读取消息进行消费,很明显,在这种全局模式下,是无法实现顺序消费的。


为了实现顺序消费,我们需要把有顺序的消息按照他的顺序,将他们发送到同一个队列中,这样消费端在消费的时候,就保证了其顺序。
但是顺序消费的性能肯定也相对差一些,因为只能使用一个队列。

一、在pom.xml中添加依赖:

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

二、在application.yml中配置RocketMQ地址:

server:

 port: 8888

rocketmq:

 name-server: 127.0.0.1:9876

 producer:

 group: ${spring.application.name}

 sendMessageTimeout: 300000

备注:官方下载RocketMQ,本地启动RocketMQ。

三、 一个简单的生产消费案例:

生产者:向 stringTopic 的主题中发送一个 Hello RecketMQ 的字符串。


@RestController

@RequestMapping("/mq")

public class ProducerController {

 @Resource

 private RocketMQTemplate rocketMQTemplate;

 

 @RequestMapping("/sync/send1")

 public String syncSendString() {

 //发送一个同步消息,会返回值 ---发送到 stringTopic 主题

        SendResult sendResult = rocketMQTemplate.syncSend("stringTopic", "Hello RocketMQ");

 return sendResult.toString();

    }

}

消费者:监听 stringTopic 主题。


@Service

@RocketMQMessageListener(topic = "stringTopic", consumerGroup = "string_consumer")

public class StringConsumer implements RocketMQListener<String> {

 @Override

 public void onMessage(String message) {

        System.out.println("消费者接收消息:" + message);

    }

}

1、启动当前服务。
2、用浏览器或者HTTP Client工具访问:http://localhost:8888/mq/sync/send1
3、查看控制台输出:【消费者接收消息:Hello RocketMQ】即表示消息消费成功。

四、实现顺序消费

生产者: 生产多条消息,方便观察顺序。向 orderTopic 主题发送5条消息,内容分别是 no1 no2 no3 no4 no5。第三个参数是order ,他的作用是会根据他的hash值计算发送到哪一个队列。用同一个值order,那么他们的hash一样。可以保证发送到同一个队列里。


@RestController

@RequestMapping("/mq")

public class ProducerController {

 @Resource

 private RocketMQTemplate rocketMQTemplate;

 

 /**************验证RocketMQ顺序消费***************/

 @RequestMapping("/send/ordered")

 public String sendOrderedMsg(){

 /**

         * hashKey: 为了保证报到同一个队列中,将消息发送到orderTopic主题上

         */

        rocketMQTemplate.syncSendOrderly("orderTopic","no1","order");

        rocketMQTemplate.syncSendOrderly("orderTopic","no2","order");

        rocketMQTemplate.syncSendOrderly("orderTopic","no3","order");

        rocketMQTemplate.syncSendOrderly("orderTopic","no4","order");

        rocketMQTemplate.syncSendOrderly("orderTopic","no5","order");

 return "success";

    }

}

消费者:消费者在消费的时候,默认是异步多线程消费的,所以无法保证顺序,需要指定同步消费。指定 consumeMode = ConsumeMode.ORDERLY。默认值是 consumeMode = ConsumeMode.CONCURRENT。


@Service

@RocketMQMessageListener(topic = "orderTopic", consumerGroup = "ordered-consumer", consumeMode = ConsumeMode.ORDERLY)

public class OrderedConsumer implements RocketMQListener<String> {

 @Override

 public void onMessage(String message) {

        System.out.println("顺序消费,收到消息:" + message);

    }

}

1、启动当前服务。
2、用浏览器或者HTTP Client工具访问:http://localhost:8888/mq/send/ordered
3、查看控制台输出:【顺序打印:no1 no2 no3 no4 no5】即表示消息消费成功。

v2-064d3d9f9eeff0a560adf374383bea28_b.jpg

Spring是一个JavaEE一站式的开发框架。它提供的功能涵盖了JavaEE程序中的表示层,服务层,持久层功能组件。这意味着,使用了Spring框架,一个框架就可以满足整个JavaEE程序的开发。

但Spring框架,更加强调的是它的轻量级(模块的可插拔)!!也就是说,除了内核以外模块,如果你不想使用可以不用,它能够整合任何第三方的框架。

所以,在现实开发中,Spring主要用于整合其他框架。我也整理了一份关于spring的面试题,希望可以帮助到大家!

感谢你看到这里,我是程序员青秧,一枚小码农,从事开发六年了,每天都会分享java相关技术文章或行业资讯

欢迎大家关注我的专栏:

程序员青秧

里面不定期分享Java架构技术知识点及解析,还会不断更新BATJ面试专题,欢迎大家前来探讨交流,如有好的文章也欢迎投稿。(注意专栏简介的介绍获取最新一线大厂Java面试题总结资料!)

注意专栏简介的介绍获取最新一线大厂Java面试题总结资料!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值