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

简介: 本文将从入门到实战一文搞懂RocketMQ

h5banner.png

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

MQ简介

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

MQ应用场景

异步解耦

很多场景不使用MQ会产生各个应用见紧密耦合在在一起,其实我们要遵循的原则就是高内聚低耦合,通过上图我们就可以看到,消息生产者,不管消息消费者状态如何,生产好的消息就直接投递到MQ中,消息消费者也是同样,不管消息生产者如何,只取MQ中的消息进行处理。这是解耦场景,还有就是异步,我们拿最简单的注册场景举例子。
image.png
这样如果正常情况我们需要150ms,但是正常的话,用户不需要等待邮件系统,以及短信系统的完成,一旦用户在注册系统完成了以后,就注册成功了,这样的话我们就可以使用异步,
image.png
这样通过MQ我们就实现了异步的操作。

流量削峰

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

RocketMQ介绍

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

我们开始吧

1.首先就是环境搭建。我们将在Linux操作系统搭建RocketMQ的服务端。
首先就是下载RocketMQ了。
https://rocketmq.apache.org/dowloading/releases/
然后就是登录ssh连接相关功能了。
另一个环境就是Java环境了。
可以参考另外一个链接https://developer.aliyun.com/article/874392
在此就不过多赘述了。
然后我们就是下载好了所需要的一些安装包。
image.png
我们把下载的rocketmq的文件上传
image.png
然后使用解压缩命令进行解压。
unzip rocketmq-all-4.9.2-bin-release.zip
首先修改一下目录名称
image.png
然后通过cd 命令进去rocketmq目录下的bin目录。
image.png
我们首先改一些脚本的参数,由于本服务器比较小,所以需要修改,正常情况,修改成真实的1/2就可以了。
通过vim命令先修改runserver.sh
image.png
image.png
修改根据你的大小。我就修改成了256m。同样runbrocker.sh也需要修改。
然后在bin使用命令启动nohup ./mqnamesrv &

然后通过这个命令可以查看启动日志
tail -f ~/logs/rocketmqlogs/namesrv.log
image.png
然后如果是云服务器的话,我们需要配置一个地方,进入上一级目录
cd ..
然后进入conf目录。
通过vim brocker.conf
添加下面的代码

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

namesrvAddr=150.158.31.224:9876
brokerIP1=150.158.31.224

将namesrvAddr设置在configfile中

image.png
ip一定要换上你服务器外网的ip
然后我们需要启动mqbrocker
回到rockermq根目录(特别重要要不然运行不成功)
nohup sh bin/mqbroker -c conf/broker.conf &
查看启动日志这样就可以了。
tail -f ~/logs/rocketmqlogs/broker.log
image.png
然后这样我们的服务端就可以配置完成了。
这样我们是没有可视化界面的。
当然RocketMQ有可视化界面的。
https://github.com/apache/rocketmq-externals/tags
image.png
下载后解压出来。
image.png
然后配置一下application.properties
image.png
然后配置端口以及刚才我们配置的ip以及端口。
image.png
然后返回根目录执行打包命令。
image.png
mvn package -Dmaven.test.skip=true
然后就可以在\target目录看见打出来的包。
然后使用java -jar rocketmq-console-ng-1.0.0.jar
刚刚打出来的包进行运行
image.png
image.png
然后就是可视化界面了。

下面就是实战

我们结合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();
}

}
image.png
然后就可以在可视化界面看到我们的消息了。
image.png
接受消息步骤:
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(){
        //获取接收到的消息
        @Override
        public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
            //消费逻辑
            System.out.println("接收到消息:"+list);
            //返回消息成功信息。
            return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
        }
    });
   // 5.启动消息消费者
    consumer.start();
    System.out.println("消费者启动成功了");
}

}

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

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
消息中间件 存储 Java
RabbitMQ 和 Spring Cloud Stream 实现异步通信
本文介绍了在微服务架构中,如何利用 RabbitMQ 作为消息代理,并结合 Spring Cloud Stream 实现高效的异步通信。内容涵盖异步通信的优势、RabbitMQ 的核心概念与特性、Spring Cloud Stream 的功能及其与 RabbitMQ 的集成方式。通过这种组合,开发者可以构建出具备高可用性、可扩展性和弹性的分布式系统,满足现代应用对快速响应和可靠消息传递的需求。
629 2
RabbitMQ 和 Spring Cloud Stream 实现异步通信
|
消息中间件 监控 Docker
Docker环境下快速部署RabbitMQ教程。
就这样,你成功地用魔法召唤出了RabbitMQ,还把它和你的应用程序连接了起来。现在,消息会像小溪流水一样,在你的系统中自由流淌。别忘了,兔子们不喜欢孤独,他们需要你细心的关怀,不时地监控它们,确保他们的世界运转得井井有条。
838 18
|
SpringCloudAlibaba Java Nacos
尚硅谷SpringCloud教程 笔记
本文介绍了基于Spring Cloud Alibaba构建的cloud-demo工程创建步骤,包括父模块及子模块的配置。父模块采用pom打包方式,定义了Java 8、Spring Boot 2.4.2、Spring Cloud 2020.0.1及Spring Cloud Alibaba 2021.1版本。包含三个主要模块:services(依赖Nacos)、service-order和service-product(均依赖spring-boot-starter-web)。同时提供了discoveryClient的测试代码,展示服务发现功能的实现与验证过程。
843 12
尚硅谷SpringCloud教程 笔记
|
SpringCloudAlibaba JavaScript Dubbo
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
本文介绍了 Dubbo-Admin 的安装和使用步骤。Dubbo-Admin 是一个前后端分离的项目,前端基于 Vue,后端基于 Spring Boot。安装前需确保开发环境(Windows 10)已安装 JDK、Maven 和 Node.js,并在 Linux CentOS 7 上部署 Zookeeper 作为注册中心。
4406 1
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
|
SpringCloudAlibaba Dubbo Java
【SpringCloud Alibaba系列】Dubbo基础入门篇
Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。
1001 1
【SpringCloud Alibaba系列】Dubbo基础入门篇
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
4500 8
|
消息中间件 存储 JSON
rabbitmq基础教程(ui,java,springamqp)
本文提供了RabbitMQ的基础教程,包括如何使用UI创建队列和交换机、Java代码操作RabbitMQ、Spring AMQP进行消息发送和接收,以及如何使用不同的交换机类型(fanout、direct、topic)进行消息路由。
347 0
rabbitmq基础教程(ui,java,springamqp)
|
消息中间件 存储 Java
SpringCloud基础4——RabbitMQ和SpringAMQP
消息队列MQ、RabbitMQ、SpringAMQP高级消息队列协议、发布/订阅模型、fanout、direct、topic模式
SpringCloud基础4——RabbitMQ和SpringAMQP
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。