RocketMQ-01 入门及安装

RocketMQ官方文档:http://rocketmq.apache.org/docs/quick-start/

一、消息系统的作用

  1. 应用解耦
  2. 流量削峰
  3. 消息分发

二、RocketMQ

(一)简单介绍

RocketMq是一个由阿里巴巴开源的消息中间件,从2007年的Notify到2010年的Napoli,2011年升级后改为MetaQ,在2012年开始做RocketMQ,采用java语言开发的。其中Notify主要使用推模型,解决了事务消息;MetaQ采用了拉模型,解决了顺序消息和海量堆积的问题。RocketMQ基于长轮询的拉取方式,兼有两者的有点,在设计上借鉴了Kafka,2017年成为apache顶级项目。

(二)RocketMQ特点

  • 是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点。
  • Producer、Consumer、队列都可以分布式。
  • Producer向一些队列轮流发送消息,队列集合称为Topic,Consumer如果做广播消费,则一个consumer实例消费这个Topic对应的所有队列,如果做集群消费,则多个Consumer实例平均消费这个topic对应的队列集合。
  • 能够保证严格的消息顺序
  • 提供丰富的消息拉取模式
  • 高效的订阅者水平扩展能力
  • 实时的消息订阅机制
  • 亿级消息堆积能力

(三)物理部署架构

在这里插入图片描述
特点如下:

  • Name Server是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
  • Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。每个Broker与Name Server集群中的所有节点建立长连接,定时注册Topic信息到所有Name Server。
  • Producer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。
  • Consumer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker配置决定。

(四)逻辑部署架构

在这里插入图片描述
这里面涉及的生产者组、消费者组等相关概念在下一节中讲解。

(五)数据存储结构

在这里插入图片描述
RocketMQ采取了一种数据与索引分离的存储方法。有效降低文件资源、IO资源,内存资源的损耗。即便是阿里这种海量数据,高并发场景也能够有效降低端到端延迟,并具备较强的横向扩展能力。

三、单机安装

  1. 官网现在自己需要的版本,下载地址:http://rocketmq.apache.org/dowloading/releases/
    可以下载源码包自己编译,也可以下载二进制包,我下载的是目前最新的4.5.1版本的二进制包

  2. 上传到linux服务器上

  3. 解压:unzip rocketmq-all-4.5.1-bin-release.zip

  4. 启动NameServer(脚本在解压后的bin目录):bin/mqnamesrv &

    Java HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
    Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
    The Name Server boot success. serializeType=JSON
    
  5. 启动Broker:bin/mqbroker -n localhost:9876 &

    Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot allocate memory' (errno=12)
    #
    # There is insufficient memory for the Java Runtime Environment to continue.
    # Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory.
    # An error report file with more information is saved as:
    # /soft/rocketmq4.5.1/bin/hs_err_pid25395.log
    
    [2]+  退出 1                ./mqbroker -n localhost:9876
    

    如果是在虚拟机启动的话,因为内存的问题,多数会报出上面的错误,我们可以对内存进行调整,修改bin下面的runserver.shrunbroker.sh,tools.sh三个文件
    runserver.sh
    JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
    runbroker.sh:
    JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
    tools.sh:
    JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m"

    之后重新启动nameserver和broker,broker启动成功,如下:

    The broker[localhost.localdomain, 10.211.55.6:10911] boot success. serializeType=JSON and name server is localhost:9876
    
  6. 查看进程,执行jps命令,可以看到如下两个进程。

    13459 BrokerStartup
    13432 NamesrvStartup
    
  7. 发送和接受消息
    这里使用rocketmq提供的示例进行演示。
    ①. 在发送和接受消息之前,需要告诉客户端name server的地址,可以简单的如下设置:
    export NAMESRV_ADDR=localhost:9876
    ②. 发送消息。sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer,效果如下:
    SendResult [sendStatus=SEND_OK, msgId=0AD3370639F52B193F2D2CE4CA0603DF, ....
    ③. 接受消息。sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer。效果如下:
    Receive New Messages: [MessageExt [queueId=0, storeSize=180, queue....

  8. 关闭Broker:sh bin/mqshutdown broker

  9. 关闭Name Server:sh bin/mqshutdown namesrv

  10. 日志位置。
    启动的时候,日志默认会被存放在~/logs/rocketmqlogs目录,我们可以进行查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值