【SpringCloud-Alibaba系列教程】14.一文教你入门RocketMQ

<本文已参与 RocketMQ Summit 优秀案例征文活动,点此了解详情>

MQ简介

MQ(Message Queue)是一种跨进程的通信机制,用于消息传递。通俗点说,就是一个先进先出的数据结构。

MQ应用场景

异步解耦

很多场景不使用MQ会产生各个应用见紧密耦合在在一起,其实我们要遵循的原则就是高内聚低耦合,通过上图我们就可以看到,消息生产者,不管消息消费者状态如何,生产好的消息就直接投递到MQ中,消息消费者也是同样,不管消息生产者如何,只取MQ中的消息进行处理。这是解耦场景,还有就是异步,我们拿最简单的注册场景举例子。


这样如果正常情况我们需要150ms,但是正常的话,用户不需要等待邮件系统,以及短信系统的完成,一旦用户在注册系统完成了以后,就注册成功了,这样的话我们就可以使用异步,

这样通过MQ我们就实现了异步的操作。

流量削峰

流量削峰也是消息队列MQ的常用场景,一般在秒杀或团队抢购(高并发)活动中使用广泛。
在秒杀或团队抢购活动中,由于用户请求量较大,导致流量暴增,秒杀的应用在处理如此大量的访问流量后,下游
的通知系统无法承载海量的调用量,甚至会导致系统崩溃等问题而发生漏通知的情况。为解决这些问题,可在应用
和下游通知系统之间加入消息队列MQ。比如平常用户的请求我们会直接访问数据库,在大量用户过来的时候,这样的话我们会对数据库照常比较大的压力。在这里我们增加一个消息队列,这样的话不管你请求来多少,我先存入消息队列,然后我再让系统慢慢的处理你的请求,这样很好的减缓了数据库的访问压力。

RocketMQ介绍

阿里巴巴的MQ中间件,由java语言开发, 性能非常好,能够撑住双十一的大流量,而且使用起来很简单。

我们开始吧

1.首先就是环境搭建。我们将在Linux操作系统搭建RocketMQ的服务端。
首先就是下载RocketMQ了。
Downloading the Apache RocketMQ Releases - Apache RocketMQ
然后就是登录ssh连接相关功能了。
另一个环境就是Java环境了。
可以参考另外一个链接Linux搭建Java环境-阿里云开发者社区
在此就不过多赘述了。
然后我们就是下载好了所需要的一些安装包。


我们把下载的rocketmq的文件上传

然后使用解压缩命令进行解压。
unzip rocketmq-all-4.9.2-bin-release.zip
首先修改一下目录名称

然后通过cd 命令进去rocketmq目录下的bin目录。

我们首先改一些脚本的参数,由于本服务器比较小,所以需要修改,正常情况,修改成真实的1/2就可以了。
通过vim命令先修改runserver.sh

修改根据你的大小。我就修改成了256m。同样runbrocker.sh也需要修改。
然后在bin使用命令启动nohup ./mqnamesrv &

然后通过这个命令可以查看启动日志
tail -f ~/logs/rocketmqlogs/namesrv.log


然后如果是云服务器的话,我们需要配置一个地方,进入上一级目录
cd ..
然后进入conf目录。
通过vim brocker.conf
添加下面的代码

brokerIP1和brokerIP2默认获取本地ip地址,在云服务器上会获取内网ip地址,因此必须显式设置

namesrvAddr=150.158.31.224:9876
brokerIP1=150.158.31.224

将namesrvAddr设置在configfile中

ip一定要换上你服务器外网的ip
然后我们需要启动mqbrocker
回到rockermq根目录(特别重要要不然运行不成功)
nohup sh bin/mqbroker -c conf/broker.conf &
查看启动日志这样就可以了。
tail -f ~/logs/rocketmqlogs/broker.log

然后这样我们的服务端就可以配置完成了。
这样我们是没有可视化界面的。
当然RocketMQ有可视化界面的。
https://github.com/apache/rocketmq-externals/tags

下载后解压出来。
然后配置一下application.properties
然后配置端口以及刚才我们配置的ip以及端口。
然后返回根目录执行打包命令。
mvn package -Dmaven.test.skip=true
然后就可以在\target目录看见打出来的包。
然后使用java -jar rocketmq-console-ng-1.0.0.jar
刚刚打出来的包进行运行
然后就是可视化界面了。

下面就是实战

我们结合java进行实战消息发送。
消息发送步骤:
1.创建消息生产者,指定生产者所属的组名
2.指定Nameserver地址
3.启动生产者
4.创建消息对象,指定主题、标签和消息体
5.发送消息
6.关闭生产者
然后我们新建test类,进行消息投递测试。
public class RocketMQSendMessageTest {

//发送消息
public static void main(String[] arg) throws MQClientException, MQBrokerException, RemotingException, InterruptedException {//1.创建消息生产者,指定生产者所属的组名DefaultMQProducer producer=new DefaultMQProducer("myproducer-group");//  2.指定Nameserver地址// producer.setNamesrvAddr("150.158.31.224:9876");producer.setNamesrvAddr("122.9.161.37:9876");// 3.启动生产者producer.start();//  4.创建消息对象,指定主题、标签和消息体Message message=new Message("myTopic","myTag",("Test RocketMQ Message").getBytes());// 5.发送消息SendResult result=producer.send(message,100000);System.out.println(result);//6.关闭生产者producer.shutdown();
}

}


然后就可以在可视化界面看到我们的消息了。
接受消息步骤:
1.创建消息消费者,指定消费者所属的组名
2.指定Nameserver地址
3.指定消费者订阅的主题和标签
4.设置回调函数,编写处理消息的方法
5.启动消息消费者
然后我们新建test类,进行消息消费测试。

public class RocketMQReceiveMessageTest {

public static void main(String[] args) throws MQClientException {// 1.创建消息消费者,指定消费者所属的组名DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("myproducer-group");// 2.指定Nameserver地址consumer.setNamesrvAddr("122.9.161.37:9876");// 3.指定消费者订阅的主题和标签consumer.subscribe("myTopic","*");//  4.设置回调函数,编写处理消息的方法consumer.registerMessageListener(new MessageListenerConcurrently(){//获取接收到的消息@Overridepublic ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {//消费逻辑System.out.println("接收到消息:"+list);//返回消息成功信息。return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}});// 5.启动消息消费者consumer.start();System.out.println("消费者启动成功了");
}

}


这样就完成了我们消费者与生产者相关的操作,当然在实际应用中还是有很多需要调整的地方,这样就基本上完成了,RocketMQ的入门操作。
关于RocketMQ的项目实战后期会在这个项目上不断添加,喜欢的请点个start~
项目源码参考一下分支220310_xgc_useRocketMQ
Gitee:springcloud-alibaba: 一个保姆级教学SpringCloud-Alibaba全栈教程
GitHub:GitHub - CoderXGC/springcloud-alibaba: 一个保姆级教学SpringCloud-Alibaba全栈教程

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512027.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

独家 | 2021双11背后的数据库硬核科技

简介&#xff1a; 今年双11&#xff0c;阿里云数据库技术有什么不一样&#xff1f; 2021年&#xff0c;是阿里巴巴首个100%云上双11 双11峰值计算成本 相比去年下降50% 作为全球规模最大的数字工程之一 双11无疑是对阿里技术人的“大考” 在又一次技术“严考"面前 …

前沿分享|阿里云资深技术专家 魏闯先:AnalyticDB PostgreSQL年度新版本发布

简介&#xff1a; 本篇内容为2021云栖大会-云原生数据仓库AnalyticDB技术与实践峰会分论坛中&#xff0c;阿里云资深技术专家 魏闯先关于“AnalyticDB PostgreSQL年度新版本发布”的分享。 本篇内容将通过三个部分来介绍AnalyticDB PG年度新版本发布。 一、AnalyticDB PG云原生…

Apache RocketMQ在我司的最佳实践--智慧政务场景下的分布式消息与分布式事务

<本文已参与 RocketMQ Summit 优秀案例征文活动&#xff0c;点此了解详情> 缘起 对于Apache RocketMQ的了解&#xff0c;追溯起来&#xff0c;可以说是从开源初始&#xff0c;就认识到了它。那时候的它&#xff0c;还是个幼年&#xff0c;没有成熟的社区&#xff0c;也…

前沿分享|阿里云数据库资深技术专家 姚奕玮:AnalyticDB MySQL离在线一体化技术揭秘

简介&#xff1a; 本篇内容为2021云栖大会-云原生数据仓库AnalyticDB技术与实践峰会分论坛中&#xff0c;阿里云数据库资深技术专家 姚奕玮关于“AnalyticDB MySQL离在线一体化技术揭秘”的分享。 本篇内容将通过三个部分来介绍AnalyticDB MySQL离在线一体化技术。 一、传统大…

今年双11,阿里业务100%上云

简介&#xff1a; 阿里巴巴业务的研发效率提升了20%、CPU资源利用率提升30%、应用100%云原生化、在线业务容器可达百万规模&#xff0c;同时计算效率大幅提升&#xff0c;双11整体计算成本三年下降30%。 今天&#xff0c;阿里巴巴首席技术官程立宣布——2021天猫双11是首个100…

linux unshare 命令,详解Linux Namespace之User

User namespace 是 Linux 3.8 新增的一种 namespace&#xff0c;用于隔离安全相关的资源&#xff0c;包括 user IDs and group IDs&#xff0c;keys, 和 capabilities。同样一个用户的 user ID 和 group ID 在不同的 user namespace 中可以不一样(与 PID nanespace 类似)。换句…

从更高到更好 2021阿里双11背后的技术亮点

简介&#xff1a; 今年&#xff0c;是阿里巴巴第13个双11。今年双11&#xff0c;阿里巴巴大促峰值的计算成本相比去年下降50%&#xff1b;截至11日&#xff0c;小蛮驴无人车在双11期间累计配送快递已超过100万件。更多的阿里自研技术投入到双11&#xff0c;在芯片、服务器等硬核…

博时基金基于RocketMQ的基金数字化陪伴体系的架构实践

简介&#xff1a; 本文以博时基金的金融场景为案例&#xff0c;阐述RocketMQ在提升客户陪伴效率和丰富金融场景化能力等方面的提升作用。 <本文已参与 RocketMQ Summit 优秀案例征文活动&#xff0c;点此了解详情> 基于RocketMQ的基金数字化陪伴体系的架构实践 博时基金…

面对DNS劫持,只能坐以待毙吗?

简介&#xff1a; 借助 ARMS-云拨测&#xff0c;我们可实时对网站进行监控&#xff0c;实现分钟级别的监控&#xff0c;及时发现 DNS 劫持以及页面篡改。 作者&#xff1a;白玙 DNS 劫持作为最常见的网络攻击方式&#xff0c;是每个站长或者运维团队最为头疼的事情。苦心经营…

linux写程序四则运算,Shell编程之变量及四则运算

Shell的学习目标Shell的基本语法结构&#xff1a; 如&#xff1a;变量的定义、条件判断、循环语句(for、until、while)、分支语句、函数和数组等。基本正则表达式的应用文件处理&#xff1a;grep、sed、awk工具的使用使用shell脚本完成复杂的任务&#xff1a;服务搭建、批量处理…

博时基金基于 RocketMQ 的互联网开放平台 Matrix 架构实践

简介&#xff1a; 随着近两年业绩的抢眼&#xff0c;公募基金迎来了乘风破浪式的发展&#xff0c;截至 2021 年 1 月底&#xff0c;资产管理规模已破 20 万亿&#xff0c;创下了历史新高。 ​ <本文已参与 RocketMQ Summit 优秀案例征文活动&#xff0c;点此了解详情> 作…

首次 统一调度系统规模化落地,全面支撑阿里巴巴双 11 全业务

简介&#xff1a; 今年双 11 首次规模化亮相的统一调度&#xff0c;通过一套调度协议、一套系统架构&#xff0c;统一管理底层的计算、存储、网络资源&#xff0c;超大规模、高效率、自动化的资源弹性&#xff0c;实现了业界新的突破。在离线混部、离在线混部、新的快上快下技术…

日志服务Dashboard加速

简介&#xff1a; 阿里云日志服务致力于为用户提供统一的可观测性平台&#xff0c;同时支持日志、时序以及Trace数据的查询存储。用户可以基于收集到的各类数据构建统一的监控以及业务大盘&#xff0c;从而及时发现系统异常&#xff0c;感知业务趋势。但是随着收集到的数据量不…

明明还有空间,硬盘却写不进去了!

作者 | 阮一峰一、inode是什么&#xff1f;文件储存在硬盘上&#xff0c;硬盘的最小存储单位叫做"扇区"&#xff08;Sector&#xff09;。每个扇区储存512字节&#xff08;相当于0.5KB&#xff09;。操作系统读取硬盘的时候&#xff0c;不会一个个扇区地读取&#xf…

Dataphin核心功能(四):安全——基于数据权限分类分级和敏感数据保护,保障企业数据安全

简介&#xff1a; 《数据安全法》的发布&#xff0c;对企业的数据安全使用和管理提出了更高的要求。Dataphin提供基于数据分级分类和数据脱敏的敏感数据识别和保护能力&#xff0c;助力企业建立合规的数据安全体系&#xff0c;保障企业数据安全。本篇&#xff0c;我们就来聊聊D…

Quick BI产品核心功能大图(四):Quick引擎加速--十亿数据亚秒级分析

简介&#xff1a; 随着数字化进程的深入&#xff0c;数据应用的价值被越来越多的企业所重视。基于数据进行决策分析是应用价值体现的重要场景&#xff0c;不同行业和体量的公司广泛依赖BI产品制作报表、仪表板和数据门户&#xff0c;以此进行决策分析。 在利用BI产品进行数据分…

云厂商靠不靠谱?“国家级标准”鉴定结果来啦

近日&#xff0c;中国电子工业标准化技术协会信息技术服务分会&#xff08;ITSS分会&#xff09;正式公布最新一批通过信息技术服务标准符合性评估的企业名单。作为云计算领域首个权威分级评估体系&#xff0c;也是目前最健全的云服务能力评估体系&#xff0c;ITSS云服务能力符…

Spring Cloud Gateway一次请求调用源码解析

简介&#xff1a; 最近通过深入学习Spring Cloud Gateway发现这个框架的架构设计非常简单、有效&#xff0c;很多组件的设计都非常值得学习&#xff0c;本文就Spring Cloud Gateway做一个简单的介绍&#xff0c;以及针对一次请求Spring Cloud Gateway的处理流程做一个较为详细的…

函数计算GB镜像秒级启动:下一代软硬件架构协同优化

简介&#xff1a; 优化镜像加速冷启动大致分为两种做法&#xff1a;降低绝对延迟和降低冷启动概率。自容器镜像上线以来我们已经通过镜像加速技术&#xff0c;分阶段降低了绝对延迟。本文在此基础上&#xff0c;介绍借助函数计算下一代IaaS底座神龙裸金属和安全容器&#xff0c…

源码级别的广播与监听实现

作者 | 阿Q来源 | 阿Q说代码闲来无事&#xff0c;又翻了遍Spring的源码。不翻不知道&#xff0c;一翻吓一跳&#xff0c;之前翻过的源码已经吃进了肚子里&#xff0c;再见亦是陌生人。今天就带大家从源码的角度来分析一下广播与监听的底层实现原理。源码解析 为了实现广播与监听…