RocketMQ概念、环境搭建

本文介绍RocketMQ消息中间件的特点及部署步骤,包括其严格的顺序保证、消息拉取模式、订阅者扩展能力等优势,并详细记录了双Master配置环境下RocketMQ的安装与配置流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述
RocketMQ是一款分布式、队列模型的消息中间件,具有以下特点:

  • A、能够保证严格的消息顺序;
    B、提供丰富的消息拉取模式;
    C、高效的订阅者水平扩展能力;
    D、实时的消息订阅机制;
    E、亿级消息堆积能力;
    F、Metaq1.x和2.x,3.x下以后版本名,产品名称改为RocketMQ

         选用理由:
            A、强调集群无单点,可扩展,任意一点高可用,水平可扩展;
            B、海量消息堆积能力,消息堆积后,写入低延迟;
            C、支持上万个队列;
            D、消息失败重试机制;
            E、消息可查询;
            F、开源社区活跃;
            G、成熟度(经过双十一考验);
    

    二、专业术语

     - Producer:消息生产者,负责生产消息,一般由业务系统负责产生消息;
    Consumer:消息消费者,负责消费消息,一般是后台系统负责异步消费;
    Push Consumer:Consumer的一种,应用通常向Consumer对象注册一个Listener接口,一旦受到消息,立刻回掉Listener接口方法;
    Pull Consumer:Consumer的一种,应用通常主动调用Consumer的拉消息方法从Broker拉消息,主动权应用控制;
    Producer Group:一类Producer的集合名称,这类Producer通常发送一类消息,且发送逻辑一致;
    Consumer Group:一类Consumer的集合名称,这类Consumer通常消费一类消息,且消费逻辑一致;
    Broker:消息中转角色,负责存储消息,转发消息,一般也成为Server,在JMS规范中称为Provider。
    广播消费:一条消息被多个Consumer消费,计时这些Consumer属于同一个Consumer Group,消息也会被Consumer Group中的每个Consumer都消费一次,广播消费中的Consumer Group概念可以认为在消息划分方面无意义。
    集群消费:一个Consumer Group中的Consumer实例平均分摊消费消息。
                      在JMS规范中,JMS point-to-point model与之类似,但是RocketMQ的集群消费功能大等于PTP模型。因为ROcket MQ单个Consumer Group内的消费者类似于PTP,但是一个Topic/Queue可以被多个Consumer Group消费。
    顺序消息:消费消息的顺序要同发送消息的顺序一致,在RocketMQ中,主要指的是局部顺序,即一类消息为满足顺序性,必须Producer单线程顺序发送,且发送到同一个队列,这样Consumer就可以按照Producer发送的顺序去消费消息。
    

三、RocketMQ环境搭建

  • 双/多master配置方式: 0、服务器环境:
    这里写图片描述
    1、命令:(每个master都要修改) vim /etc/hosts
   IP:192.168.100.24 ;NAME:rocketmq-nameserver1   
   IP:192.168.100.24 ;NAME:rocketmq-master1   
   IP:192.168.100.25 ;NAME:rocketmq-nameserver2

2、命令:service network restart
3、命令:tar -zxvf alibaba-rocketmq-3.4.2.6.tar.gz -C /usr/local/
4、创建软连接,命令:ln -s alibaba-rocketmq-3.4.2.6 rocketmq
5、创建存储路劲,命令:mkdir /usr/local/rocketmq/store
命令:mkdir /usr/local/rocketmq/store/commitlog
命令:mkdir /usr/local/rocketmq/store/consumequeue
命令:mkdir /usr/local/rocketmq/store/index
6、修改RocketMQ配置文件,命令:vim /usr/local/rocketmq/conf/2m-noslave/broker-a.properties
内容如下:

   #所属集群名字 
   brokerClusterName=rocketmq-cluster
   #broker名字,注意此处不同的配置文件填写的不一样  
   brokerName=broker-a
   #0表示Master,>0表示Slave 
   brokerId=0
   #nameServer地址,分号分割  
   namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
   #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数  
   defaultTopicQueueNums=4
   #是否允许Broker自动创建Topic,建议线下开启,线上关闭  
   autoCreateTopicEnable=true
   #是否允许Broker自动创建订阅组,建议线下开启,线上关闭 
   autoCreateSubscritionGroup=true
   #Broker对外服务的监听端口  
   listentPort=10911
   #删除文件时间点,默认凌晨4点  
   deleteWhen=04
   #文件保留时间,默认48小时  
   fileReservedTime=120
   #commitLog每个文件的大小默认1G  
   mapedFileSizeCommitLog=1073741824
   #ConsumeQueue每个文件默认存30w条,根据业务情况调整
   ConsumeQueue=300000
   #destroyMapedFileIntervalFocibly=120000
   #redeleteHangedFileInterval=120000
   #检查物理文件磁盘空间 
   diskMaxUsedSpaceRatio=88
   #存储路径  
   storePathRootDir=/usr/local/rocketmq/store
   #commitLog存储路径  
   storePathCommitLog=/usr/local/rocketmq/store/commitlog
   #消费队列存储路径存储路径  
   storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
   #消息索引存储路径  
   storePathIndex=/usr/local/rocketmq/store/index
   #checkpoint文件存储路径  
   storeCheckpoint=/usr/local/rocketmq/store/checkpoint
   #abort文件存储路径  
   abortFile=/usr/local/rocketmq/store/abort
   #限制的消息大小  
   maxMessageSize=65536
   #flushConsumeQueueLeastages=2
   #flushCommitLogThoroughInterval=10000
   #flushConsumeQueueThoroughInterval=60000
   #Broker的角色
   #-ASYNC_MASTER以不复制Master
   #-SYNC_mATER 同步双写Master
   brokerRole=ASYNC_MASTER
   #磁盘方式
   #-ASYNC_FLUSH异步刷盘
   #-SYNC_FLUSH同步刷盘 flushDiskType=ASYNC_FLUSH
   #checkTransactionMessageEnable=false
   #发消息线程数量
   #sendMessagethreadPoolNums=128
   #拉消息线程池数量

(重复上面内容修改操作)

vim /usr/local/rocketmq/conf/2m-noslave/broker-b.properties

7、修改日志配置文件【两台机器】,命令:mkdir -p /usr/local/rocketmq/logs
命令:cd/usr/local/rocketmq/conf && sed-i's#${usr.home}#/usr/local/rocketmq#g'*.xml

8、修改启动脚本参数【两台机器】

vim /usr/local/rocketmq/bin/runbroker.sh

修改内容:
JAVA_OPT=”${JAVA_OPT} -server -Xmx1g -Xmn512m -XX:PermSize=128m


vim /usr/local/rocketmq/bin/runserver.sh

修改内容:
JAVA_OPT=”${JAVA_OPT} -server -Xmx1g -Xmn512m -XX:PermSize=128m

9、启动 NameServer【两天机器】,命令:cd/usr/local/rocket/bin nohup sh mqnamesrv &

10、启动Broker Server A 【192.168.100.24】
命令:nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 &
命令:netstat -ntlp
命令:jps
命令:tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log
命令:tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log

11、启动BrokerServer B 【192.168.100.25】
命令:nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-b.properties >/dev/null 2>&1 &
命令:netstat -ntlp
命令:jps
命令:tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log
命令:tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log
12、解压Tomcat,命令:tar -zxvf apache-tomcat-7.029.tar.gz -C /usr/local
13、进入tomcat,命令:cd apache-tomcat-7.0.29/webapps/ ,上传rocketmq-console控制台war包
14、命令:mikdir /usr/local/rocketmq-console
15、解压rocketmq-console.war到rocketmq-console文件夹中,命令:unzip rocketmq-console.war -d rocketmq-console
16、进入rocketmq-console中的web-inf的class文件,命令:cd rocketmq-console/ ,命令:cd WEB-INF,命令:cd class/
17、修改配置文件,命令:vim config.properties
配置完成,可以启动
18、启动tomcat,命令:/usr/local/apache-tomcat-7.0.29/bin/startup.sh
19|、查看启动结果,命令:jps
20、查看tomcat日志,命令:tail -f -n 500 /usr/local/apache-tomcat-7.0.29/logs/catalina.out

资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 “STC单片机电压测量”是一个以STC系列单片机为基础的电压检测应用案例,它涵盖了硬件电路设计、软件编程以及数据处理等核心知识点。STC单片机凭借其低功耗、高性价比和丰富的I/O接口,在电子工程领域得到了广泛应用。 STC是Specialized Technology Corporation的缩写,该公司的单片机基于8051内核,具备内部振荡器、高速运算能力、ISP(在系统编程)和IAP(在应用编程)功能,非常适合用于各种嵌入式控制系统。 在源代码方面,“浅雪”风格的代码通常简洁易懂,非常适合初学者学习。其中,“main.c”文件是程序的入口,包含了电压测量的核心逻辑;“STARTUP.A51”是启动代码,负责初始化单片机的硬件环境;“电压测量_uvopt.bak”和“电压测量_uvproj.bak”可能是Keil编译器的配置文件备份,用于设置编译选项和项目配置。 对于3S锂电池电压测量,3S锂电池由三节锂离子电池串联而成,标称电压为11.1V。测量时需要考虑电池的串联特性,通过分压电路将高电压转换为单片机可接受的范围,并实时监控,防止过充或过放,以确保电池的安全和寿命。 在电压测量电路设计中,“电压测量.lnp”文件可能包含电路布局信息,而“.hex”文件是编译后的机器码,用于烧录到单片机中。电路中通常会使用ADC(模拟数字转换器)将模拟电压信号转换为数字信号供单片机处理。 在软件编程方面,“StringData.h”文件可能包含程序中使用的字符串常量和数据结构定义。处理电压数据时,可能涉及浮点数运算,需要了解STC单片机对浮点数的支持情况,以及如何高效地存储和显示电压值。 用户界面方面,“电压测量.uvgui.kidd”可能是用户界面的配置文件,用于显示测量结果。在嵌入式系统中,用
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 在 Android 开发中,Fragment 是界面的一个模块化组件,可用于在 Activity 中灵活地添加、删除或替换。将 ListView 集成到 Fragment 中,能够实现数据的动态加载与列表形式展示,对于构建复杂且交互丰富的界面非常有帮助。本文将详细介绍如何在 Fragment 中使用 ListView。 首先,需要在 Fragment 的布局文件中添加 ListView 的 XML 定义。一个基本的 ListView 元素代码如下: 接着,创建适配器来填充 ListView 的数据。通常会使用 BaseAdapter 的子类,如 ArrayAdapter 或自定义适配器。例如,创建一个简单的 MyListAdapter,继承自 ArrayAdapter,并在构造函数中传入数据集: 在 Fragment 的 onCreateView 或 onActivityCreated 方法中,实例化 ListView 和适配器,并将适配器设置到 ListView 上: 为了提升用户体验,可以为 ListView 设置点击事件监听器: 性能优化也是关键。设置 ListView 的 android:cacheColorHint 属性可提升滚动流畅度。在 getView 方法中复用 convertView,可减少视图创建,提升性能。对于复杂需求,如异步加载数据,可使用 LoaderManager 和 CursorLoader,这能更好地管理数据加载,避免内存泄漏,支持数据变更时自动刷新。 总结来说,Fragment 中的 ListView 使用涉及布局设计、适配器创建与定制、数据绑定及事件监听。掌握这些步骤,可构建功能强大的应用。实际开发中,还需优化 ListView 性能,确保应用流畅运
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值