前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[分布式学习]消息队列之rocketmq笔记

[分布式学习]消息队列之rocketmq笔记

作者头像
_淡定_
发布2019-06-05 16:50:56
6740
发布2019-06-05 16:50:56
举报
文章被收录于专栏:dotnet & javadotnet & javadotnet & java

mq有很多,近期买了《分布式消息中间件实践》这本书,学习关于mq的相关知识。mq大致有有4个功能:

  1. 异步处理。比如业务端需要给用户发送邮件,不需要等发送完了之后才让业务端的调用代码返回。
  2. 服务解耦。服务之间调用不需要在代码上写死调用某某服务,只需要发送一个消息即可。这种发送消息的处理一般都是立即返回。类似于生成一个后台job。
  3. 流量削峰。业务系统在做活动的时候短时间内的流量会特别大,基于mq的队列的特性,可以处理这个瞬时流量过大的问题,减轻后端压力。
  4. 消息通讯。主要是订阅机制,类似聊天室。

内容介绍

低延时的分布式消息处理平台,高性能,可扩展,万亿级。由4个部分构成。name server,broker(消息代理人),producer,consumers。这4个都能水平扩展(做成集群的方式)来避免单点故障。

NameServers (集群)

NameServer是一个完整的功能性服务。主要包含以下两个方面:

  • Broker管理。接收Broker集群过来的注册消息,然后提供心跳包机制来检查Broker是否还存活。
  • 路由管理。每一个NameServer都包含关于Broker的完整路由信息,并且队列化处理客户端的查询请求。

有4种方式用于客户端指定NameServer的地址。

  1. 编程方式。类似 producer.setNamesrvAddr("ip:port")
  2. Java 配置。使用 rocketmq.namesrv.addr
  3. 环境变量。使用 NAMESRV_ADDR
  4. http 端点。

提供轻量的服务发现与路由,每一个Name Server记录完整的路由信息,提供相应的读写服务,同时支持快速存储扩展。

Broker (集群)

Broker负责消息的存储和分发,消息查询,高可用保证等。模块如下图所示。

Broker模块
Broker模块

所以,他有以下几个比较重要的子模块:

  • 远程模块。Broker的入口,用于接收客户端过来的请求。
  • 客户端管理。用于(生产者/消费者)模式的客户端管理,维护消费者对主题的订阅。
  • 存储服务。提供一些简单的api用于查询or存储物理磁盘上的消息。
  • 高可用保证服务。提供主从Broker之间的数据同步特性。
  • 索引服务。通过特定的key对消息构建索引,然后提供消息查询。

通过提供轻量级的主题队列机制来负责消息的储存。支持推拉模式,包含错误容忍机制(2或3份拷贝)。消息的顺序处理。提供容灾回复,预警机制等。

Producer (集群)

生产者提供分布式部署。分布式的生产者通过负载均衡的方式发送消息给Broker。支持快速错误反馈,并且低延迟。

Consumer (集群)

消费者也支持在推/拉模式中的分布式部署。支持集群消费+消息广播。提供实时的消息订阅机制以满足大部分需求。

如何运行(单机测试环境)

下载

安装包就好(源码也行),然后解压

wget http://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.5.1/rocketmq-all-4.5.1-bin-release.zip
unzip rocketmq-all-4.5.1-bin-release.zip -d /usr/lib/rocketmq/

改一些配置

环境变量
#配置64位jdk是必须的---这里跳过
export ROCKETMQ_HOME=/usr/lib/rocketmq/rocketmq #这个不是必须,只是方便下面操作
source ~/.bash_profile #使配置生效一下
rm -f ~/logs/rocketmqlogs/*.log # 把日志清了,方便查看
启动参数

rocketmq默认的内存配置要求对我们的测试服务器要求太高了,改低一点。

vim $ROCKETMQ_HOME/bin/runserver.sh
# 把第39行改成
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g" #最小,启动,最大都是1g

vim $ROCKETMQ_HOME/bin/runbroker.sh
# 把39行改成
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g" # 同上面
broker配置
vim $ROCKETMQ_HOME/conf/broker.conf
# 加这些配置
brokerIP1 = 192.168.3.20 #此broker的ip
namesvrAddr=192.168.3.20:9876 #nameServer地址,集群的话需要分号分隔。

启动NameServer

因为需要NameServer来管理Broker,所以先启动NameServer。默认的日志地址为~/logs/rocketmqlogs

nohup sh $ROCKETMQ_HOME/bin/mqnamesrv & # 以忽略挂起信号的方式启动nameserver
tail -f ~/logs/rocketmqlogs/namesrv.log # 监控的方式查看日志尾部

启动Broker

消息要通过Broker来分发,NameServer也已经启动,所以现在可以启动Broker。

nohup sh $ROCKETMQ_HOME/bin/mqbroker -c $ROCKETMQ_HOME/conf/broker.conf &
tail -f ~/logs/rocketmqlogs/broker.log

web站点查看

这里需要去下载这个,里面有个rocketmq-console。需要修改一个地方。rocketmq-externals/rocketmq-console/src/main/resources/application.properties

rocketmq.config.namesrvAddr=192.168.3.20:9876 #改成对应的namesrvAddr 地址

服务器上需要开放几个端口用于console的连接,如果没有配置,就是默认的:9876,10911,10909

firewall-cmd --zone=public --add-port=9876/tcp --permanent
firewall-cmd --reload

然后就能查看了。

控制台
控制台

发送、接收消息

后续通过代码客户端的方式来实践。

关闭服务

sh $ROCKETMQ_HOME/bin/mqshutdown broker #先关了Broker
sh $ROCKETMQ_HOME/bin/mqshutdown namesrv #再关闭nameserver
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 内容介绍
    • NameServers (集群)
      • Broker (集群)
        • Producer (集群)
          • Consumer (集群)
          • 如何运行(单机测试环境)
            • 下载
              • 改一些配置
                • 环境变量
                • 启动参数
                • broker配置
              • 启动NameServer
                • 启动Broker
                  • web站点查看
                    • 发送、接收消息
                      • 关闭服务
                      相关产品与服务
                      负载均衡
                      负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档