【消息中间件】为什么选择RocketMQ及SpringBoot整合使用案例
创始人
2024-03-18 17:13:04

 

目录

一、为什么选择RocketMQ

1、为什么是为什么选择RocketMQ

2、RocketMQ、ActiveMQ和Kafka之间的比较

2.1、对比1

2.2、对比2,接着上表

二、使用案例

1、引入依赖

2、编写启动类

3、编写application.yml配置文件

4、创建rocketmq文件夹

4.1、创建生产者

4.2、创建消费者

5、控制器


一、为什么选择RocketMQ

1、为什么是为什么选择RocketMQ

    在阿里孕育 RocketMQ 的雏形时期,阿里将其用于异步通信、搜索、社交网络活动流、数据管道,贸易流程中。随着阿里的贸易业务吞吐量的上升,源自阿里的消息传递集群的压力也变得紧迫。

    根据研究,随着队列和虚拟主题使用的增加,ActiveMQ IO模块达到了一个瓶颈。阿里尽力通过节流、断路器或降级来解决这个问题,但效果并不理想。于是尝试了流行的消息传递解决方案Kafka。不幸的是,Kafka不能满足阿里的要求,其尤其表现在低延迟高可靠性方面,详见这里。在这种情况下,阿里决定发明一个新的消息传递引擎来处理更广泛的消息用例,覆盖从传统的pub/sub场景到高容量的实时零误差的交易系统。

    Apache RocketMQ 自诞生以来,因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余年的大规模场景打磨,RocketMQ 已经成为业内共识的金融级可靠业务消息首选方案,被广泛应用于互联网、大数据、移动互联网、物联网等领域的业务场景。

2、RocketMQ、ActiveMQ和Kafka之间的比较

2.1、对比1

消息队列Client SDK支持协议有序消息调度消息批处理消息广播消息消息过滤器
ActiveMQJava, .NET, C++ etc.Push模式, 支持 OpenWire, STOMP, AMQP, MQTT, JMS独占使用者队列或独占队列可以确保排序支持不支持支持支持
KafkaJava, Scala etc.Pull模式, 支持TCP确保分区内消息的顺序不支持支持,使用异步生产者不支持支持,你可以使用Kafka Streams来过滤信息
RocketMQJava, C++, GoPull模式, 支持 TCP, JMS, OpenMessaging确保严格的消息顺序,并能够优雅地扩大规模支持支持,同步模式,以避免消息丢失支持支持,基于 SQL92的属性筛选表达式

2.2、对比2,接着上

服务器触发重发消息存储消息追溯消息优先级高可用性和故障转移消息轨道配置管理及运作工具
不支持使用 JDBC 和高性能日志(如 levelDB、 kahaDB)支持非常快速的持久性支持支持支持,如果使用 levelDB,则需要一个 ZooKeeper 服务器,具体取决于存储不支持默认配置级别较低,用户需要优化配置参数支持
不支持高性能文件存储支持偏移量指示不支持支持,需要一个 ZooKeeper 服务器不支持卡夫卡使用键值对格式进行配置。这些值可以通过文件提供,也可以通过编程方式提供。支持,使用终端命令公开核心指标
支持高性能和低延迟文件存储支持时间戳和偏移量指示不支持支持,主从模型,没有其他工具包支持开箱即用,用户只需要注意几个配置支持丰富的 web 和终端命令来公开核心指标

二、使用案例

1、引入依赖

    org.springframework.bootspring-boot-starter-actuatororg.apache.rocketmqrocketmq-spring-boot-starter2.0.3org.apache.rocketmqrocketmq-client4.5.2

2、编写启动类

前提是你安装了RocketMQ,在《Window系统安装RocketMQ》已经介绍。

/*** RocketMQ启动mqnamesrv.cmd、mqbroker.cmd** @author CeaM* 2022/08/28 10:11**/
@SpringBootApplication
public class RocketMQApp {public static void main(String[] args) {SpringApplication.run(RocketMQApp.class, args);}
}

3、编写application.yml配置文件

server:port: 8989rocketmq:name-server: localhost:9876producer:group: ceam_groupconsumer:group: ceam_group

我用本地的rocketmq端口,这个按照你自己环境配置

4、创建rocketmq文件夹

4.1、创建生产者

package com.ceam.rocketmq.rocketmq;import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.stereotype.Component;/*** @author CeaM* 2022/08/28 10:24**/
@Slf4j
@Component
@AllArgsConstructor
public class MQProducer {private final RocketMQTemplate rocketMQTemplate;/*** convertAndSend(…):使用此方法,交换机会马上把所有的信息都交给所有的消费者,消费者再自行处理,不会因为消费者处理慢而阻塞线程。* convertSendAndReceive(…):可以同步消费者。使用此方法,当确认了所有的消费者都接收成功之后,才触发另一个convertSendAndReceive(…),* 也就是才会接收下一条消息。RPC调用方式。* **/public void sendMessage(){// new_topic是topicrocketMQTemplate.convertAndSend("TopicTest","hello RocketMQ");log.info("发送成功过了");}
}

4.2、创建消费者

package com.ceam.rocketmq.rocketmq;import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;/*** @author CeaM* 2022/08/28 10:24**/
@Slf4j
@Component
@RocketMQMessageListener(topic = "TopicTest", consumerGroup = "${rocketmq.consumer.group}")
public class MQConsumer implements RocketMQListener {@Overridepublic void onMessage(String s) {log.info("收到消息啦,消息为:{}", s);}
}

5、控制器

简单测试一下接口调用

package com.ceam.rocketmq.controller;import com.ceam.rocketmq.rocketmq.MQProducer;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author CeaM* 2022/08/28 15:05**/
@RestController
@AllArgsConstructor
public class TestController {private final MQProducer mqProducer;@GetMapping("/mq")public void send() {mqProducer.sendMessage();}}

测试结果:

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...