前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >天下没有难学的技术,带你手撕RocketMQ

天下没有难学的技术,带你手撕RocketMQ

作者头像
程序猿小亮
发布2021-12-07 11:28:16
5530
发布2021-12-07 11:28:16
举报
文章被收录于专栏:程序猿小亮的专栏

前言

本来是想写RocketMQ系列博文第一篇RocketMQ简介,大致内容包括介绍什么是RocketMQ以及教大家如何安装RocketMQ的。但是呢?有网友说,学习RocketMQ官网特别难。

博主本着天下没有难学的技术,带领大家一起手撕RocketMQ。对于技术人员来说,官网才是第一手资料,解决所有棘手问题的起点,也是终点。

学习任何一项技术的通用步骤,三个W,解决所有问题:

1、首先,问What,了解学习这项技术是干嘛的,能够解决现实项目中的什么问题?

2、其次,问How,怎么做,如何下载(找到github),安装,编写简单的HelloWorld,进行实践

3、最终,问Why,为什么要这么做,原理是什么,架构是什么样的?

下面我们就用上面的3个W,手撕RocketMQ官网。

概述,什么是RocketMQ

我们找到RocketMQ官网地址:https://rocketmq.apache.org/

首先,介绍了设计RocketMQ的动机以及原因。阿里初期的消息队列使用的ActiveMQ,随着使用了越来越来的队列和虚拟主题,遇到了ActiveMQ的IO瓶颈。通过节流,断路器或降级等方案,尝试解决问题,但是效果不好。于是研究其他替代方案,但是kafka在低延迟和高可靠性方面不能满足阿里的业务需求,于是设计了RocketMQ。

官网对RocketMQ,ActiveMQ和Kafka三款MQ产品进行了简单的对比,内容如下:

RocketMQ vs. ActiveMQ vs. Kafka

下表展示了RocketMQ,ActiveMQ和Kafka(Apache最流行的消息传递解决方案)之间的比较:

MQ产品

客户端 SDK

协议和规范

有序消息

定时消息

批处理消息

广播消息

消息过滤

消息重发

消息存储

消息回溯

消息优先级

高可用性和故障转移

消息轨迹

配置

管理和操作工具

ActiveMQ

Java, .NET, C++ 等

推模式,支持 OpenWire,STOMP, AMQP, MQTT, JMS

独立消费或独立队列可以保证消息有序

支持

不支持

支持

支持

不支持

使用JDBC以及高性能日志(例如levelDB,kahaDB)支持非常快速的持久性

支持

支持

支持, 依赖存储,如果使用levelDB 则需要ZooKeeper

不支持

默认配置为低级别,用户需要优化配置参数

支持

Kafka

Java, Scala 等

拉模式,支持 TCP

保证独立分区内消息的有序性

不支持

支持(通过异步生产者)

不支持

支持, 可以使用Kafka Streams 过滤消息

不支持

高性能文件存储

支持按照偏移量表示

不支持

支持, 需要ZooKeeper

不支持

Kafka使用键值对格式进行配置。这些值可以从文件或以编程方式提供。

支持,使用终端命令公开核心指标

RocketMQ

Java, C++, Go

拉模式, 支持TCP,JMS, OpenMessaging

严格确保消息有序,并可以优雅的扩展

支持

支持,同步模式以避免消息丢失

支持

支持, 基于SQL92的属性过滤器表示式

支持

高性能和低延迟的文件存储

支持,使用时间戳和偏移量两个指标表示

不支持

支持, 主从模式,无需其他插件

支持

开箱即用,用户只需要注意一些配置

支持,丰富Web和终端命令可显示核心指标

如何下载及安装

在快速开启中,RocketMQ为我们提供了中文的学习文档,https://github.com/apache/rocketmq/tree/master/docs/cn

学习RocketMQ需要5个先前条件。

  1. 推荐使用64位操作系统,建议使用Linux / Unix / Mac;(Windows用户请参见下面的指南)
  2. 64位JDK 1.8+;
  3. Maven 3.2.x;
  4. Git;
  5. 适用于Broker服务器的4g +可用磁盘

我们既可以通过下载源码编译的方式,进行构建,部署,也可以从下载链接中直接下载已经构建好的工具包进行部署。

代码语言:javascript
复制
  > unzip rocketmq-all-4.8.0-source-release.zip
  > cd rocketmq-all-4.8.0/
  > mvn -Prelease-all -DskipTests clean install -U
  > cd distribution/target/rocketmq-4.8.0/rocketmq-4.8.0

Linux

启动 Name Server

代码语言:javascript
复制
  # 1.启动NameServer
  > nohup sh bin/mqnamesrv &
  # 2.查看启动日志
  > tail -f ~/logs/rocketmqlogs/namesrv.log
  The Name Server boot success...

启动 Broker

代码语言:javascript
复制
  # 1.启动Broker
  > nohup sh bin/mqbroker -n localhost:9876 &
  # 2.查看启动日志
  > tail -f ~/logs/rocketmqlogs/broker.log 
  The broker[%s, 172.30.30.233:10911] boot success...

测试RocketMQ发送和接收消息

首先要设置环境变量NAMESRV_ADDR

代码语言:javascript
复制
 # 1.设置环境变量
 > export NAMESRV_ADDR=localhost:9876
 # 2.使用安装包的Demo发送消息
 > sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
 SendResult [sendStatus=SEND_OK, msgId= ...
 # 3.接收消息
 > sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
 ConsumeMessageThread_%d Receive New Messages: [MessageExt...

关闭服务器

代码语言:javascript
复制
# 1.关闭Broker
> sh bin/mqshutdown broker
The mqbroker(36695) is running...
Send shutdown request to mqbroker(36695) OK
# 2.关闭NameServer
> sh bin/mqshutdown namesrv
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK

Windows

下载最新的二进制版本。并将zip文件解压缩到本地磁盘中。如:D:\rocketmq

添加环境变量

代码语言:javascript
复制
ROCKETMQ_HOME="D:\rocketmq"
NAMESRV_ADDR="localhost:9876"

启动 Name Server

设置正确的环境变量后,切换到rocketmq的解压目录,直接运行

代码语言:javascript
复制
.\bin\mqnamesrv.cmd

启动 Broker

Open new powershell window, after set the correct environment variable. then change directory to rocketmq type and run:

代码语言:javascript
复制
.\bin\mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true

测试RocketMQ发送和接收消息

确保已经正确配置环境变量,切到rocketmq目录并运行。

代码语言:javascript
复制
# 1、发送消息
.\bin\tools.cmd  org.apache.rocketmq.example.quickstart.Producer
# 2、接收消息
.\bin\tools.cmd  org.apache.rocketmq.example.quickstart.Consumer

关闭服务器

通常,直接关闭命令行窗口即可。(请勿在生产环境中执行此操作)

注意

  • 问题描述: RocketMQ默认的虚拟机内存较大,启动Broker如果因为内存不足失败,需要编辑如下两个配置文件,修改JVM内存大小

# 编辑runbroker.sh和runserver.sh修改默认JVM大小 vi runbroker.sh vi runserver.sh

  • 参考设置:

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

原理是什么?

RocketMQ中文文档中包含了所有我们需要学习的内容,包括RocketMQ概念与特性,架构设计,RocketMQ最常见各种消息案例、最佳实践、集群部署。中文内容,相信大家只要肯付出时间,不断实践。RocketMQ就是你永远的技术栈。

总结

如何学习一门技术的技巧,你GET到了吗?加油吧,小伙子!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 概述,什么是RocketMQ
    • RocketMQ vs. ActiveMQ vs. Kafka
    • 如何下载及安装
      • Linux
        • 启动 Name Server
        • 启动 Broker
        • 测试RocketMQ发送和接收消息
        • 关闭服务器
      • Windows
        • 添加环境变量
        • 启动 Name Server
        • 启动 Broker
        • 测试RocketMQ发送和接收消息
        • 关闭服务器
    • 原理是什么?
    • 总结
    相关产品与服务
    文件存储
    文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档