RocketMQ安装及各角色

安装流程

RocketMQ安装启动测试

      1.项目下载:
      从GitHub上下载源码并上传到服务器——https://github.com/apache/rocketmq

      2.安装maven,编译项目:

1)下载maven
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

2)添加镜像 修改`maven/conf`目录下的`settings.xml`  在mirrors节点下添加
<mirror> 
    <id>aliyun-maven</id> 
    <mirrorOf>*</mirrorOf> 
    <name>aliyun maven</name> 
    <url>http://maven.aliyun.com/nexus/content/groups/public</url> 
</mirror>

3)配置maven环境变量  修改`/etc/profile`
export M2_HOME=/usr/local/maven
export PATH=$PATH:$M2_HOME/bin

4)配置java环境变量   注:环境变量修完执行`source /etc/profile`立即生效
export JAVA_HOME="/usr/java/jdk1.8.0_181-amd64"
export CLASS_PATH="$JAVA_HOME/lib"
export PATH=".$PATH:$JAVA_HOME/bin"

5)进入rocketmq主目录编译项目,执行:
mvn -Prelease-all -DskipTests clean install -U

      3.启动项目:
      启动nameserver:bin目录下执行 ./mqnamesrv
      启动Broker:bin目录下执行 ./mqbroker -n ip:9876

      如果报错 Cannot allocate memory 原因是jvm启动初始化内存分配大于物理内存

`runbroker.sh` broker     `runserver.sh` nameserver
修改默认数值
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=100m"

      4.测试消息:
      使用tool.sh脚本执行测试程序:在bin目录下执行
      ./tools.sh org.apache.rocketmq.example.quickstart.Producer
      如果发生失败出现 connect to null failed 原因是没有指定nameserver的地址,在脚本中添加 export NAMESRV_ADDR=ip:端口

      接收消息: ./tools.sh org.apache.rocketmq.example.quickstart.Consumer

控制台安装

      1.下载地址:https://github.com/apache/rocketmq-externals
      2.编译:tar包上传服务器解压缩后,进入rocketmq-console目录执行编译:
      mvn clean package -Dmaven.test.skip=true
      3.启动:在rocketmq-console/target目录下执行rocketmq-console-ng-1.0.1.jar,启动时,直接动态添加nameserver地址或编辑application.properties添加属性:
      java -jar rocketmq-console-ng-1.0.1.jar --rocketmq.config.namesrvAddr=ip:9876

RocketMQ功能用途

  • 应用解耦,各应用之间不再互相依赖
  • 流量削峰:使用消息中间件来缓冲大量的请求,匀速消费,当消息队列中堆积消息过多时,我们可以动态上线增加消费端,来保证不丢失重要请求
  • 大数据处理:可以把各个模块中产生的管理员操作日志、用户行为、系统状态等数据文件作为消息收集到主题中,数据使用方可以订阅自己感兴趣的数据内容互不影响,进行消费

角色说明

各角色间交互关系

在这里插入图片描述

nameserver

  • 提供路由管理、服务注册、服务发现的功能,支持Broker的动态注册与发现,是一个无状态节点,底层由netty实现。
  • 服务注册/发现:集群中各个角色(producer、broker、consumer等)都需要定时想nameserver上报自己的状态,以便互相发现彼此,超时不上报的话,nameserver会把它从列表中剔除
  • Broker管理:NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供心跳检测机制,检查Broker是否还存活
  • 路由信息管理:每个NameServer将保存关于Broker集群的整个路由信息和用于客户端查询的队列信息。然后Producer和Conumser通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费
    NameServer通常也是集群的方式部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,所以每一个NameServer实例上面都保存一份完整的路由信息。当某个NameServer因某种原因下线了,Broker仍然可以向其它NameServer同步其路由信息,Producer,Consumer仍然可以动态感知Broker的路由的信息
  • 可集群式部署多个:多个nameserver存在的时候,其他角色同时向他们上报信息,以保证高可用
  • 部署多个时,多个nameserver间不相互通信,没有主备的概念
  • 内存式存储:nameserver中的broker、topic等信息默认不会持久化

broker

  • Broker面向producer和consumer接受和发送消息

  • 向nameserver提交自己的信息

  • 是消息中间件的消息存储、转发服务器

  • 每个Broker节点,在启动时,都会遍历NameServer列表,与每个NameServer建立长连接,注册自己的信息,之后定时上报

  • Broker高可用,可以配成Master/Slave结构,Master可写可读,Slave只可以读,Master将写入的数据同步给Slave

    • 一个Master可以对应多个Slave,但是一个Slave只能对应一个Master
    • Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义BrokerId为0表示Master,非0表示Slave
    • 每个Broker与nameserver集群中的所有节点建立长连接,定时注册Topic信息到所有nameserver

producer

  • 消息的生产者
  • 通过nameserver集群中的其中一个节点(随机选择)建立长连接,获得Topic的路由信息,包括Topic下面有哪些Queue,这些Queue分布在哪些Broker上等
  • 接下来向提供Topic服务的Master建立长连接,且定时向Master发送心跳

consumer

  • 消息的消费者
  • 通过NameServer集群获得Topic的路由信息,连接到对应的Broker上消费消息
  • 因为Master和Slave都可以读取消息,所以Consumer会与Master和Slave都建立连接
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值