• 消息队列之RocketMQ简介及单机部署


    1 RocketMQ各组件介绍

    官方参考部署文档:https://rocketmq.apache.org/docs/quick-start/

    1.1 NameServer

    NameServer是一个非常简单的Topic路由注册中心,其角色类似Dubbo中的zookeeper,支持Broker的动态注册与发现。主要包括两个功能:

    Broker管理:NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供心跳检测机制,检查Broker是否还存活;

    路由信息管理:每个NameServer将保存关于Broker集群的整个路由信息和用于客户端查询的队列信息。然后Produce和Conumser通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。NameServer通常也是集群的方式部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,所有每一个NameServer实例送上面都保存一份完整的路由信息。当某个NameServer因某种原因下线了,Broker任然可以向其他NameServer同步其路由信息,Producer,Consumer仍然可以动态感知Broker的路由信息。

    1.2 Broker

    Broker主要负责消息的存储、投递和查询以及服务高可用保证,为了实现这些功能,Broker包含了以下几个重要子模块:

    Remoting Module:整个Broker的实体,负责处理来自clients端的请求。

    Client Manager:负责管理客户端(Producer/Consumer)和维护Consumer的Topoc订阅信息。

    Store Service:提供方便简单的API接口处理消息存储到物理磁盘和查询功能。

    HA Service:高可用服务,提供Master Broker和Slvae Broker之间的数据同步功能。

    Index Service:根据特定的Message Key对投递到Broker的消息进行索引服务,以提供消息的快速查询。

    1.3 Producer(生产者)

    消息发布者,支持分布式集群部署。Produer 通过 MQ 负载均衡模块选择相应 Broker 中的 queue 进行消息投递,投递过程支持快速失败并且低延迟。

    1.4 Consumer(消费者)

    消息消费的角色,支持分布式集群方式部署。支持以push推,pull拉两种模式对消息进行消费。同时也支持集群方式和广播方式的消费,它提供实时消息订阅机制,可以满足大多数用户的需求。

    1.5 Topic

    区分消息的种类;一个发送者可以发送消息给一个或者多个Topic;一个消息的接收者可以订阅一个或者多个Topic消息。

    1.6 Message Queue

    相当于是Topic的分区;用于并行发送和接收消息。

    2 RocketMQ的特点

    1、是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式等特点。

    2、Producer、Consumer、队列都可以分布式。

    3、Producer向一些队列轮流发送消息,队列集合称为Topic,Consumer如果做广播消费,则一个Consumer实例消费这个Topic所有队列,如果做集群消费,则多个Consumer实例平均消费这Topic对应的队列集合。

    4、能够保证严格的消息顺序。

    5、支持拉(pull)和推(push)两种消息模式。

    6、高效的订阅者水平扩展能力。

    7、实时的消息订阅机制。

    8、亿级消息堆积能力。

    9、支持多种消息协议,如JMS、OpenMessaging等。

    10、较少的依赖。

    3 RocketMQ单机部署

    官方参考地址:https://rocketmq.apache.org/docs/quick-start/

    3.1 部署java环境

    #创建java的目录
    mkdir -p /apps/java
    #将下载好的文件传到目录下解压
    tar xvf jdk-8u271-linux-x64.tar.gz
    #创建软链接
    ln -sv jdk1.8.0_271/ jdk
    #配置环境变量
    vim /etc/profile.d/java.sh
    #java环境变量
    export JAVA_HOME=/apps/java/jdk
    export JRE_HOME=$JAVA_HOME/jre
    export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
    #同步文件
    source /etc/profile.d/java.sh
    #测试java环境变量是否配置成功
    root@ubuntu-40:/apps# java -version
    java version "1.8.0_271"
    Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
    Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)

    3.2 部署RocketMQ

    #下载RocketMQ包
    root@ubuntu-40:/apps/rocketMQ# wget https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.9.0/rocketmq-all-4.9.0-bin-release.zip
    #解压
    root@ubuntu-40:/apps/rocketMQ# unzip rocketmq-all-4.9.0-bin-release.zip
    #创建软链接
    root@ubuntu-40:/apps/rocketMQ# ln -sv rocketmq-all-4.9.0-bin-release/ rocketmq
    #虚拟机环境下,需要修改配置文件中的内存大小
    root@ubuntu-40:/apps/rocketMQ/rocketmq# vim bin/runserver.sh
    JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn25m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"
    root@ubuntu-40:/apps/rocketMQ/rocketmq# vim bin/runbroker.sh
    JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m"
    #启动namesev
    root@ubuntu-40:/apps/rocketMQ/rocketmq# nohup bash bin/mqnamesrv &
    #启动broker
    root@ubuntu-40:/apps/rocketMQ/rocketmq# nohup sh bin/mqbroker -n localhost:9876 &
    #验证是否部署成功
    root@ubuntu-40:/apps/rocketMQ/rocketmq# jps
    33812 BrokerStartup
    33783 NamesrvStartup
    34011 Jps
    #关闭namesev
    root@ubuntu-40:/apps/rocketMQ/rocketmq# sh bin/mqshutdown namesrv
    #关闭broker
    root@ubuntu-40:/apps/rocketMQ/rocketmq# sh bin/mqshutdown broker

    3.3 使用systemctl管理RocketMQ

    namesrv的service文件

    [Unit]
    Description=namesrv
    After=network.target
    Documentation=http://rocketmq.apache.org/
    
    [Service]
    #启动用户
    User=root
    #这里Type一定要写simple
    Type=simple
    #java的位置
    Environment=JAVA_HOME=/apps/java/jdk
    #ExecStart和ExecStop分别在systemctl start和systemctl stop时候调动
    ExecStart=/apps/rocketmq/rocketmq-all-4.9.0-bin-release/bin/mqnamesrv
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/apps/rocketmq/rocketmq-all-4.9.0-bin-release/bin/mqshutdown namesrv
    
    [Install]
    WantedBy=multi-user.target

    broker的service文件

    [Unit]
    Description=broker
    After=network.target
    Documentation=http://rocketmq.apache.org/
    
    [Service]
    #启动用户
    User=root
    #这里Type一定要写simple
    Type=simple
    #java的位置
    Environment=JAVA_HOME=/apps/java/jdk
    #ExecStart和ExecStop分别在systemctl start和systemctl stop时候调动
    #注意:启动时,需要在Broker.conf文件中指定namesrv的ip和端口 ExecStart
    =/apps/rocketmq/rocketmq-all-4.9.0-bin-release/bin/mqbroker -c /apps/rocketmq/rocketmq-all-4.9.0-bin-release/conf/broker.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/apps/rocketmq/rocketmq-all-4.9.0-bin-release/bin/mqshutdown broker [Install] WantedBy=multi-user.target

    3.4 RocketMQ web管理界面 rocketMQ-console

    下载地址:https://github.com/apache/rocketmq-externals

    #先将RocketMQ-console的源码克隆下来
    git clone https://github.com/apache/rocketmq-externals.git
    #里面会有很多个项目
    root@ubuntu-001:/data/daima/rocketmq-externals-master# ll
    total 132
    drwxr-xr-x 30 root root 4096 Jun 10 12:48 ./
    drwxr-xr-x  4 root root 4096 Jun 17 14:46 ../
    drwxr-xr-x  2 root root 4096 Jun 10 12:48 .github/
    -rw-r--r--  1 root root  154 Jun 10 12:48 .gitignore
    -rw-r--r--  1 root root  349 Jun 10 12:48 .travis.yml
    -rw-r--r--  1 root root 3425 Jun 10 12:48 README.md
    drwxr-xr-x  2 root root 4096 Jun 10 12:48 dev/
    drwxr-xr-x  3 root root 4096 Jun 10 12:48 docs/
    drwxr-xr-x  2 root root 4096 Jun 10 12:48 rocketmq-cloudevents-binding/
    drwxr-xr-x  6 root root 4096 Jun 10 12:48 rocketmq-connect/
    drwxr-xr-x  3 root root 4096 Jun 10 12:48 rocketmq-connect-activemq/
    drwxr-xr-x  4 root root 4096 Jun 10 12:48 rocketmq-connect-cassandra/
    drwxr-xr-x  2 root root 4096 Jun 10 12:48 rocketmq-connect-console/
    drwxr-xr-x  2 root root 4096 Jun 10 12:48 rocketmq-connect-es/
    drwxr-xr-x  3 root root 4096 Jun 10 12:48 rocketmq-connect-jdbc/
    drwxr-xr-x  3 root root 4096 Jun 10 12:48 rocketmq-connect-jms/
    drwxr-xr-x  3 root root 4096 Jun 10 12:48 rocketmq-connect-kafka/
    drwxr-xr-x  3 root root 4096 Jun 10 12:48 rocketmq-connect-mongo/
    drwxr-xr-x  3 root root 4096 Jun 10 12:48 rocketmq-connect-rabbitmq/
    drwxr-xr-x  4 root root 4096 Jun 10 12:48 rocketmq-connect-redis/
    drwxr-xr-x  5 root root 4096 Jun 10 12:48 rocketmq-console/
    drwxr-xr-x  4 root root 4096 Jun 10 12:48 rocketmq-flink/
    drwxr-xr-x  5 root root 4096 Jun 10 12:48 rocketmq-flume/
    drwxr-xr-x  5 root root 4096 Jun 10 12:48 rocketmq-hbase/
    drwxr-xr-x  7 root root 4096 Jun 10 12:48 rocketmq-iot-bridge/
    drwxr-xr-x  5 root root 4096 Jun 10 12:48 rocketmq-jms/
    drwxr-xr-x  3 root root 4096 Jun 10 12:48 rocketmq-knative/
    drwxr-xr-x  5 root root 4096 Jun 10 12:48 rocketmq-mysql/
    drwxr-xr-x  4 root root 4096 Jun 10 12:48 rocketmq-redis/
    drwxr-xr-x  3 root root 4096 Jun 10 12:48 rocketmq-replicator/
    drwxr-xr-x  3 root root 4096 Jun 10 12:48 rocketmq-sentinel/
    drwxr-xr-x  7 root root 4096 Jun 10 12:48 rocketmq-serializer/
    drwxr-xr-x  4 root root 4096 Jun 10 12:48 rocketmq-spark/
    #进入到console源代码目录,使用mvn进行编译
    cd rocketmq-console
    mvn clean package -Dmaven.test.skip=true
    #启动前需要指定namesrv的地址,所以需要设置环境变量
    export NAMESRV_ADDR="localhost:9876"
    #后台启动rocketMQ-console
    nohup java -jar rocketmq-console-ng-2.0.0.jar &

    在浏览器中输入访问,默认地址ip:8080

  • 相关阅读:
    矩阵十题(7)
    线段树成段更新 poj 3468 A Simple Problem with Integers
    线段树单点更新 hdu 2795 Billboard
    线段树成段更新 poj 2528 Mayor's posters
    矩阵十题(10)
    矩阵十题(8)
    矩阵十题(5)
    矩阵十题(6)
    矩阵十题(9)
    矩阵十题(4)
  • 原文地址:https://www.cnblogs.com/nj-duzi/p/14961391.html
Copyright © 2020-2023  润新知