【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一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
2月前
|
消息中间件 Java RocketMQ
RocketMQ实战教程之RocketMQ安装
这是一篇关于RocketMQ安装的实战教程,主要介绍了在CentOS系统上使用传统安装和Docker两种方式安装RocketMQ。首先,系统需要是64位,并且已经安装了JDK 1.8。传统安装包括下载安装包,解压并启动NameServer和Broker。Docker安装则涉及安装docker和docker-compose,然后通过docker-compose.yaml文件配置并启动服务。教程还提供了启动命令和解决问题的提示。
|
2月前
|
消息中间件 前端开发 数据库
RocketMQ实战教程之MQ简介与应用场景
RocketMQ实战教程介绍了MQ的基本概念和应用场景。MQ(消息队列)是生产者和消费者模型,用于异步传输数据,实现系统解耦。消息中间件在生产者发送消息和消费者接收消息之间起到邮箱作用,简化通信。主要应用场景包括:1)应用解耦,如订单系统与库存系统的非直接交互;2)异步处理,如用户注册后的邮件和短信发送延迟处理,提高响应速度;3)流量削峰,如秒杀活动限制并发流量,防止系统崩溃。
|
3天前
|
消息中间件 新零售 弹性计算
云消息队列 RabbitMQ 版入门训练营,解锁对比开源优势与零基础实战
欢迎加入「云消息队列 RabbitMQ 版入门训练营」。
|
27天前
|
存储 搜索推荐 Java
微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门
微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门
29 2
|
23天前
|
JSON Java Spring
实战SpringCloud响应式微服务系列教程(第八章)构建响应式RESTful服务
实战SpringCloud响应式微服务系列教程(第八章)构建响应式RESTful服务
|
2月前
|
消息中间件 存储 Apache
RocketMQ实战教程之常见概念和模型
Apache RocketMQ 实战教程介绍了其核心概念和模型。消息是基本的数据传输单元,主题是消息的分类容器,支持字节、数字和短划线命名,最长64个字符。消息类型包括普通、顺序、事务和定时/延时消息。消息队列是实际存储和传输消息的容器,是主题的分区。消费者分组是一组行为一致的消费者的逻辑集合,也有命名限制。此外,文档还提到了一些使用约束和建议,如主题和消费者组名的命名规则,消息大小限制,请求超时时间等。RocketMQ 提供了多种消息模型,包括发布/订阅模型,有助于理解和优化消息处理。
|
26天前
|
消息中间件 存储 Kafka
01.RabbitMQ入门
01.RabbitMQ入门
37 0
|
2月前
|
消息中间件 存储 Java
RocketMQ实战教程之NameServer与BrokerServer
这是一个关于RocketMQ实战教程的概要,主要讨论NameServer和BrokerServer的角色。NameServer负责管理所有BrokerServer,而BrokerServer存储和传输消息。生产者和消费者通过NameServer找到合适的Broker进行交互,不需要直接知道Broker的具体信息。工作流程包括生产者向NameServer查询后发送消息到Broker,以及消费者同样通过NameServer获取消息进行消费。这种设计类似于服务注册中心的概念,便于系统扩展和集群管理。
|
1月前
|
消息中间件 Java Spring
最新spingboot整合rabbitmq详细教程
最新spingboot整合rabbitmq详细教程
|
2月前
|
消息中间件 Cloud Native 自动驾驶
RocketMQ实战教程之MQ简介
Apache RocketMQ 是一个云原生的消息流平台,支持消息、事件和流处理,适用于云边端一体化场景。官网提供详细文档和下载资源:[RocketMQ官网](https://rocketmq.apache.org/zh/)。示例中提到了RocketMQ在物联网(如小米台灯)和自动驾驶等领域的应用。要开始使用,可从[下载页面](https://rocketmq.apache.org/zh/download)获取软件。