广州有哪些做网站的公司,网站建设的前端开发和后端开发,黑龙江建设网官方网站特种作业,网站建设中最重要的环节是什么有时候我们在使用消息队列的时候#xff0c;往往需要能够保证消息的顺序消费#xff0c;而RocketMQ是可以支持消息的顺序消费的。RocketMQ在发送消息的时候#xff0c;是将消息发送到不同的队列中#xff0c;然后消费端从多个队列中读取消息进行消费#xff0c;很明显往往需要能够保证消息的顺序消费而RocketMQ是可以支持消息的顺序消费的。 RocketMQ在发送消息的时候是将消息发送到不同的队列中然后消费端从多个队列中读取消息进行消费很明显在这种全局模式下是无法实现顺序消费的。 为了实现顺序消费我们需要把有顺序的消息按照他的顺序将他们发送到同一个队列中这样消费端在消费的时候就保证了其顺序。 但是顺序消费的性能肯定也相对差一些因为只能使用一个队列。一、在pom.xml中添加依赖dependencygroupIdorg.apache.rocketmq/groupIdartifactIdrocketmq-spring-boot-starter/artifactIdversion2.1.0/version
/dependency二、在application.yml中配置RocketMQ地址server:port: 8888rocketmq:name-server: 127.0.0.1:9876producer:group: ${spring.application.name}sendMessageTimeout: 300000 备注官方下载RocketMQ本地启动RocketMQ。三、 一个简单的生产消费案例生产者向 stringTopic 的主题中发送一个 Hello RecketMQ 的字符串。
RestControllerRequestMapping(/mq)public class ProducerController {Resourceprivate RocketMQTemplate rocketMQTemplate;RequestMapping(/sync/send1)public String syncSendString() {//发送一个同步消息会返回值 ---发送到 stringTopic 主题SendResult sendResult rocketMQTemplate.syncSend(stringTopic, Hello RocketMQ);return sendResult.toString();}}消费者监听 stringTopic 主题。
ServiceRocketMQMessageListener(topic stringTopic, consumerGroup string_consumer)public class StringConsumer implements RocketMQListenerString {Overridepublic void onMessage(String message) {System.out.println(消费者接收消息 message);}}1、启动当前服务。2、用浏览器或者HTTP Client工具访问http://localhost:8888/mq/sync/send13、查看控制台输出【消费者接收消息Hello RocketMQ】即表示消息消费成功。四、实现顺序消费生产者 生产多条消息方便观察顺序。向 orderTopic 主题发送5条消息内容分别是 no1 no2 no3 no4 no5。第三个参数是order 他的作用是会根据他的hash值计算发送到哪一个队列。用同一个值order那么他们的hash一样。可以保证发送到同一个队列里。
RestControllerRequestMapping(/mq)public class ProducerController {Resourceprivate 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。
ServiceRocketMQMessageListener(topic orderTopic, consumerGroup ordered-consumer, consumeMode ConsumeMode.ORDERLY)public class OrderedConsumer implements RocketMQListenerString {Overridepublic void onMessage(String message) {System.out.println(顺序消费收到消息: message);}}1、启动当前服务。2、用浏览器或者HTTP Client工具访问http://localhost:8888/mq/send/ordered3、查看控制台输出【顺序打印no1 no2 no3 no4 no5】即表示消息消费成功。Spring是一个JavaEE一站式的开发框架。它提供的功能涵盖了JavaEE程序中的表示层服务层持久层功能组件。这意味着使用了Spring框架一个框架就可以满足整个JavaEE程序的开发。但Spring框架更加强调的是它的轻量级模块的可插拔也就是说除了内核以外模块如果你不想使用可以不用它能够整合任何第三方的框架。所以在现实开发中Spring主要用于整合其他框架。我也整理了一份关于spring的面试题希望可以帮助到大家感谢你看到这里我是程序员青秧一枚小码农从事开发六年了每天都会分享java相关技术文章或行业资讯欢迎大家关注我的专栏程序员青秧里面不定期分享Java架构技术知识点及解析还会不断更新BATJ面试专题欢迎大家前来探讨交流如有好的文章也欢迎投稿。注意专栏简介的介绍获取最新一线大厂Java面试题总结资料注意专栏简介的介绍获取最新一线大厂Java面试题总结资料