zoukankan      html  css  js  c++  java
  • RocketMQ(1)---架构原理及环境搭建

    一、架构简述

    RocketMQ阿里开源的一个分布式消息传递和流媒体平台,具有低延迟,高性能和可靠性, 万亿级容量和灵活的可伸缩性。跟其它中间件相比,RocketMQ的特点是JAVA实现,在发生宕机和其它故障时消息丢失率更低

    它由四个部分组成:nameserver,broker,生产者和消费者。它们中的每一个都可以水平扩展,而没有单个故障点。  

    Nameserver:提供轻量级的服务发现和路由。生产者和消费者通过nameserver获取broker信息。它几乎是无状态的,nameserver结点之间没有任何的数据同步,broker注册信息时会注册到每一个nameserver结点上面,所以每个nameserver节点都记录了完整broker信息,提供相应的读写服务,并支持快速的存储扩展。

    Broker:通过提供轻量级的topic和queue机制来存储消息。与nameserver中的每个节点建立长连接,定时注册topic等信息到nameserver上面。broker一般都是主从模式,因为消息是真实存储消息的地方,避免一个结点挂了,导致这个节点数据全部丢失。

    Producer:与nameserver集群中的一个结点建立长连接,定期的拉取broker 的topic路由信息,再将消息发送到对应broker的topic上面

    Consumer:与nameserver集群中的一个结点建立长连接,定期的拉取broker 的topic路由信息,再去消费对应broker的topic信息

    二、环境搭建

     1.官网下载:http://rocketmq.apache.org/release_notes/release-notes-4.7.0/

    2.解压 unzip rocketmq-all-4.7.0-bin-release.zip

    3.修改启动参数配置。默认的jvm参数内存设置特别大,如果自己机器不行的话需要手动改下bin目录下的启动参数文件:runbroker.sh 和runserver.sh文件 我的虚拟机内存分配不大,改成256m 256m 128m

       这是默认的

    4.启动nameserver: nohup sh mqnamesrv ‐n 192.168.0.67:9876 &   (将日志输出当前目录的nohub.out文件,方便查看启动日志,ip是当前机器的ip)

     5.启动broker:nohup sh mqbroker ‐n 192.168.0.67:9876 autoCreateTopicEnable=true &  (autoCreateTopicEnable=true 自动创建topic,如果不设置true的话,生产者发送消息的时候如果没有topic就会发送失败,需要提前把topic创建好,设置true会在发送时自动创建topic,192.168.0.67:9876 是name server)

    也可以使用配置文件启动broker:nohup sh mqbroker ‐n 192.168.0.67:9876 ‐c conf/broker.conf &

    简单看下默认的配置文件中的一些参数:

    #集群名字
    brokerClusterName = DefaultCluster
    #broker名字,集群中主从都要用这个名字,才会组成一个集群
    brokerName = broker-a
    #id为0的是master  非0的slava
    brokerId = 0
    #消息处理时间,凌晨4点
    deleteWhen = 04
    #消息保存时间默认48小时,48小时之后的凌晨4点就会清理
    fileReservedTime = 48
    #集群主从之间数据同步方式 
    #异步只需要发到master成功就返回客户端段成功,性能高,但是如果master挂了 slave还未同步就会丢失消息。根据自身业务场景选择合适方式
    brokerRole = ASYNC_MASTER
    #消息刷盘机制,和主从数据同步类似,同步就是说需要写进磁盘了才返回成功。异步就是写进内存了就返回成功,后面再去落盘。
    flushDiskType = ASYNC_FLUSH
    #自动创建topic
    autoCreateTopicEnable=true

    使用配置文件启动:nohup sh bin/mqbroker ‐n 192.168.0.67:9876 -c conf/broker.conf &

    broker 192.168.0.67:10911关联的nameserver是192.168.0.67:9876

    至此一个单机的rocketMQ的环境就搭建好了   正常退出: sh mqshutdown broker  和  sh mqshutdown namesrv

    测试下消息发送,使用rocketMQ提供的测试脚本:

    export NAMESRV_ADDR=192.168.0.67:9876

    生产者脚本

    sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
    消费者脚本
    sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
    发送消息:
     

     消费消息:

    三、控制台搭建

    1.下载rocketMQ的扩展包,master分支:https://github.com/apache/rocketmq-external 

     2.启动rocketmq-console-ng模块

     3.修改此模块配置:

      3.1 maven依赖rocketMQ版本改成自己部署版本对应的,我部署的MQ是最新的4.7.0版本

      3.2 配置文件中配置namserver地址和控制台数据存放地址

     正常来说改完这两个地方就可以直接启动控制台的这个springboot程序了。

    但是因为我用的MQ是最新的4.7版本,控制台对应的还没有更新到最新的。编译都有会报错的地方

    1.DefaultMQPullConsumer这个类已经不推荐使用了,并且4.7.0中有两个类似的构造器,原来代码直接传了一个null,第二个参数无法识别是哪个构造器的。修改下把第二参数强转String或者RPCHook

    2.MQAdminExt这个接口中加了新方法,但是控制台中MQAdminExtImpl还没有实现对应的方法。这个问题在github上几天前已经有人提了Issues了,我这里是自己添加一下默认实现然后服务就可以正常启动了,还不确定后续后面有什么影响没有,至少可以启动了

    之前使用测试脚本发送的消息 以及topic都可以在控制台看到了

  • 相关阅读:
    做了个上传下载任意文件到数据库
    owc 的使用技巧
    设计模式
    WCF 附录 高级主题 系列文章
    .NET 3.5 中WCF客户端代理性能改进以及最佳实践
    WCF 的几个问题
    你了解 Assembly.Load 吗?
    WCF 第十三章 可编程站点 系列文章
    WCF 第十二章 对等网 系列文章
    最佳实践:显式打开共享访问的WCF客户端代理
  • 原文地址:https://www.cnblogs.com/nijunyang/p/13167027.html
Copyright © 2011-2022 走看看