RocketMQ5-02快速部署RocketMQ5.x(手动和容器部署)

news2024/12/29 7:59:47

RocketMQ5快速入门指南(含部署实践)

  • 部署环境
  • 本机单机可执行包部署、Docker部署
    • Mac部署:下载源文件
    • 可执行包部署 NameServer
      • 问题1:资源不足
      • 补充: 关于日志的输出
    • 可执行包部署 Broker
      • 对于Local模式
      • 对于Cluster模式
    • 对于 Proxy
    • Docker部署 NameServer
    • Docker部署 Broker

跟着官方文档 Quick start 体验 RocketMQ5.X

在这里插入图片描述

部署环境

本地测试环境:

  • MacOS 10.15.7
  • JDK 17
  • docker 20.10.17

官方要求:

  • 64位操作系统,推荐 Linux/Unix/macOS
  • 64位 JDK 推荐 1.8 以上

以上都是符合的

本机单机可执行包部署、Docker部署

Mac部署:下载源文件

部署包分为源码包和可执行包,源码包下载后需要自己编译,可执行包下载后就是直接启动。为了避免本地环境打包问题,我是直接选用了可执行包进行体验。

  • 源码包下载 点这里下载5.1.4 source版本
  • 可执行包下载 点这里下载5.1.4 bin版本
  • 也可到这里精挑细选其他版本:https://dist.apache.org/repos/dist/release/rocketmq/,bin版本直接执行,source版本需要编译

在这里插入图片描述
如果想编译,可以参考以下:

$ unzip rocketmq-all-5.1.4-source-release.zip
$ cd rocketmq-all-5.1.4-source-release/
$ mvn -Prelease-all -DskipTests -Dspotbugs.skip=true clean install -U
$ cd distribution/target/rocketmq-5.1.4/rocketmq-5.1.4

对于已经下载好和编译好的执行目录结构大致如下:

:~/Downloads/rocketmq-all-5.1.4-bin-release$ tree -L 3
.
├── LICENSE
├── NOTICE
├── README.md
├── benchmark
│   ├── batchproducer.sh
│   ├── consumer.sh
│   ├── producer.sh
│   ├── runclass.sh
│   ├── shutdown.sh
│   └── tproducer.sh
├── bin
│   ├── README.md
│   ├── cachedog.sh
│   ├── cleancache.sh
│   ├── cleancache.v1.sh
│   ├── controller
│   │   ├── fast-try-independent-deployment.cmd
│   │   ├── fast-try-independent-deployment.sh
│   │   ├── fast-try-namesrv-plugin.cmd
│   │   ├── fast-try-namesrv-plugin.sh
│   │   ├── fast-try.cmd
│   │   └── fast-try.sh
│   ├── dledger
│   │   └── fast-try.sh
│   ├── export.sh
│   ├── mqadmin
│   ├── mqadmin.cmd
│   ├── mqbroker
│   ├── mqbroker.cmd
│   ├── mqbroker.numanode0
│   ├── mqbroker.numanode1
│   ├── mqbroker.numanode2
│   ├── mqbroker.numanode3
│   ├── mqbrokercontainer
│   ├── mqcontroller
│   ├── mqcontroller.cmd
│   ├── mqnamesrv
│   ├── mqnamesrv.cmd
│   ├── mqproxy
│   ├── mqproxy.cmd
│   ├── mqshutdown
│   ├── mqshutdown.cmd
│   ├── nohup.out
│   ├── os.sh
│   ├── play.cmd
│   ├── play.sh
│   ├── runbroker.cmd
│   ├── runbroker.sh
│   ├── runserver.cmd
│   ├── runserver.sh
│   ├── setcache.sh
│   ├── startfsrv.sh
│   ├── tools.cmd
│   └── tools.sh
├── conf
│   ├── 2m-2s-async
│   │   ├── broker-a-s.properties
│   │   ├── broker-a.properties
│   │   ├── broker-b-s.properties
│   │   └── broker-b.properties
│   ├── 2m-2s-sync
│   │   ├── broker-a-s.properties
│   │   ├── broker-a.properties
│   │   ├── broker-b-s.properties
│   │   └── broker-b.properties
│   ├── 2m-noslave
│   │   ├── broker-a.properties
│   │   ├── broker-b.properties
│   │   └── broker-trace.properties
│   ├── broker.conf
│   ├── container
│   │   └── 2container-2m-2s
│   ├── controller
│   │   ├── cluster-3n-independent
│   │   ├── cluster-3n-namesrv-plugin
│   │   ├── controller-standalone.conf
│   │   └── quick-start
│   ├── dledger
│   │   ├── broker-n0.conf
│   │   ├── broker-n1.conf
│   │   └── broker-n2.conf
│   ├── plain_acl.yml
│   ├── rmq-proxy.json
│   ├── rmq.broker.logback.xml
│   ├── rmq.client.logback.xml
│   ├── rmq.controller.logback.xml
│   ├── rmq.namesrv.logback.xml
│   ├── rmq.proxy.logback.xml
│   ├── rmq.tools.logback.xml
│   └── tools.yml
├── lib
│   ├── animal-sniffer-annotations-1.21.jar
│   ├── annotations-13.0.jar
│   ├── annotations-4.1.1.4.jar
│   ├── annotations-api-6.0.53.jar
│   ├── awaitility-4.1.0.jar
│   ├── bcpkix-jdk15on-1.69.jar
│   ├── bcprov-jdk15on-1.69.jar
│   ├── bcutil-jdk15on-1.69.jar
│   ├── caffeine-2.9.3.jar
│   ├── checker-qual-3.12.0.jar
│   ├── commons-beanutils-1.9.4.jar
│   ├── commons-cli-1.5.0.jar
│   ├── commons-codec-1.13.jar
│   ├── commons-collections-3.2.2.jar
│   ├── commons-digester-2.1.jar
│   ├── commons-io-2.7.jar
│   ├── commons-lang3-3.12.0.jar
│   ├── commons-logging-1.2.jar
│   ├── commons-validator-1.7.jar
│   ├── concurrentlinkedhashmap-lru-1.4.2.jar
│   ├── disruptor-1.2.10.jar
│   ├── dledger-0.3.1.2.jar
│   ├── error_prone_annotations-2.14.0.jar
│   ├── failureaccess-1.0.1.jar
│   ├── fastjson-1.2.83.jar
│   ├── grpc-api-1.50.0.jar
│   ├── grpc-context-1.50.0.jar
│   ├── grpc-core-1.50.0.jar
│   ├── grpc-netty-shaded-1.50.0.jar
│   ├── grpc-protobuf-1.50.0.jar
│   ├── grpc-protobuf-lite-1.50.0.jar
│   ├── grpc-services-1.50.0.jar
│   ├── grpc-stub-1.50.0.jar
│   ├── gson-2.9.0.jar
│   ├── guava-31.1-jre.jar
│   ├── hamcrest-2.1.jar
│   ├── j2objc-annotations-1.3.jar
│   ├── jackson-core-2.15.2.jar
│   ├── jaeger-thrift-1.6.0.jar
│   ├── jaeger-tracerresolver-1.6.0.jar
│   ├── javassist-3.20.0-GA.jar
│   ├── javax.annotation-api-1.3.2.jar
│   ├── jna-4.2.2.jar
│   ├── jsr305-3.0.2.jar
│   ├── jul-to-slf4j-2.0.6.jar
│   ├── kotlin-stdlib-1.6.20.jar
│   ├── kotlin-stdlib-common-1.6.20.jar
│   ├── kotlin-stdlib-jdk7-1.6.20.jar
│   ├── kotlin-stdlib-jdk8-1.6.20.jar
│   ├── libthrift-0.14.1.jar
│   ├── listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
│   ├── lz4-java-1.8.0.jar
│   ├── netty-all-4.1.65.Final.jar
│   ├── netty-tcnative-boringssl-static-2.0.53.Final-linux-aarch_64.jar
│   ├── netty-tcnative-boringssl-static-2.0.53.Final-linux-x86_64.jar
│   ├── netty-tcnative-boringssl-static-2.0.53.Final-osx-aarch_64.jar
│   ├── netty-tcnative-boringssl-static-2.0.53.Final-osx-x86_64.jar
│   ├── netty-tcnative-boringssl-static-2.0.53.Final-windows-x86_64.jar
│   ├── netty-tcnative-boringssl-static-2.0.53.Final.jar
│   ├── netty-tcnative-classes-2.0.53.Final.jar
│   ├── okhttp-4.11.0.jar
│   ├── okio-3.2.0.jar
│   ├── okio-jvm-3.0.0.jar
│   ├── openmessaging-api-0.3.1-alpha.jar
│   ├── opentelemetry-api-1.29.0.jar
│   ├── opentelemetry-api-events-1.29.0-alpha.jar
│   ├── opentelemetry-context-1.29.0.jar
│   ├── opentelemetry-exporter-common-1.29.0.jar
│   ├── opentelemetry-exporter-logging-1.29.0.jar
│   ├── opentelemetry-exporter-logging-otlp-1.29.0.jar
│   ├── opentelemetry-exporter-otlp-1.29.0.jar
│   ├── opentelemetry-exporter-otlp-common-1.29.0.jar
│   ├── opentelemetry-exporter-prometheus-1.29.0-alpha.jar
│   ├── opentelemetry-exporter-sender-okhttp-1.29.0.jar
│   ├── opentelemetry-extension-incubator-1.29.0-alpha.jar
│   ├── opentelemetry-sdk-1.29.0.jar
│   ├── opentelemetry-sdk-common-1.29.0.jar
│   ├── opentelemetry-sdk-extension-autoconfigure-spi-1.29.0.jar
│   ├── opentelemetry-sdk-logs-1.29.0.jar
│   ├── opentelemetry-sdk-metrics-1.29.0.jar
│   ├── opentelemetry-sdk-trace-1.29.0.jar
│   ├── opentelemetry-semconv-1.29.0-alpha.jar
│   ├── opentracing-noop-0.33.0.jar
│   ├── opentracing-tracerresolver-0.1.8.jar
│   ├── opentracing-util-0.33.0.jar
│   ├── perfmark-api-0.25.0.jar
│   ├── proto-google-common-protos-2.9.0.jar
│   ├── protobuf-java-3.20.1.jar
│   ├── protobuf-java-util-3.20.1.jar
│   ├── rocketmq-acl-5.1.4.jar
│   ├── rocketmq-broker-5.1.4.jar
│   ├── rocketmq-client-5.1.4.jar
│   ├── rocketmq-common-5.1.4.jar
│   ├── rocketmq-container-5.1.4.jar
│   ├── rocketmq-controller-5.1.4.jar
│   ├── rocketmq-example-5.1.4.jar
│   ├── rocketmq-filter-5.1.4.jar
│   ├── rocketmq-grpc-netty-codec-haproxy-1.0.0.jar
│   ├── rocketmq-logback-classic-1.0.1.jar
│   ├── rocketmq-namesrv-5.1.4.jar
│   ├── rocketmq-openmessaging-5.1.4.jar
│   ├── rocketmq-proto-2.0.3.jar
│   ├── rocketmq-proxy-5.1.4.jar
│   ├── rocketmq-remoting-5.1.4.jar
│   ├── rocketmq-rocksdb-1.0.3.jar
│   ├── rocketmq-shaded-slf4j-api-bridge-1.0.0.jar
│   ├── rocketmq-slf4j-api-1.0.1.jar
│   ├── rocketmq-srvutil-5.1.4.jar
│   ├── rocketmq-store-5.1.4.jar
│   ├── rocketmq-tiered-store-5.1.4.jar
│   ├── rocketmq-tools-5.1.4.jar
│   ├── slf4j-api-2.0.3.jar
│   ├── snakeyaml-1.32.jar
│   ├── tomcat-annotations-api-8.5.46.jar
│   ├── tomcat-embed-core-8.5.46.jar
│   └── zstd-jni-1.5.2-2.jar
├── logs
└── nohup.out

17 directories, 192 files

可执行包部署 NameServer

负责管理消息队列和消费者组,默认启动在9876端口。

├── LICENSE
├── NOTICE
├── README.md
├── benchmark
├── bin
├── conf
├── lib
├── logs
└── nohup.out

其中,bin下是我们执行脚本命令的地方,conf是配置连接信息的地方,logs是日志打印的地方,nohup启动默认日志会输出到nohup.out下

跟着以下指令来启动

$ nohup sh bin/mqnamesrv &
[1] 111631
[~ rocketmq]# nohup: ignoring input and appending output to 'nohup.out'

[$ rocketmq]# tail -f logs/rocketmqlogs/namesrv.log 
2024-01-08 10:17:08 INFO NSScanScheduledThread - start scanNotActiveBroker
2024-01-08 10:17:13 INFO NSScanScheduledThread - start scanNotActiveBroker

正常服务资源充足的话,可以看到 The Name Server boot success. serializeType=JSON, address 0.0.0.0:9876

此外官方让在这个目录下查看日志tail -f ~/logs/rocketmqlogs/namesrv.log,或者我是在nohup.out 中看的。注意是用户主目录下的 ~/logs 不是此应用目录的 logs 下。

但是作为测试,也有可能因为资源不足出现执行后却未启动成功的情况,这个时候就需要看日志了

问题1:资源不足
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000700000000, 4294967296, 0) failed; error='Not enough space' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.

表示没有足够的空间来启动RocketMQ,那么它默认需要多少呢,是否可以调整呢?是可以的。

通过 /bin/runserver.sh 脚本我们可以看到

 if [ -z "$JAVA_MAJOR_VERSION" ] || [ "$JAVA_MAJOR_VERSION" -lt "9" ] ; then
      JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
      JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC"
      JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
      JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
    else
      JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
      JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
      JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log:time,tags:filecount=5,filesize=30M"

这里我们看到虽然JDK版本不同会有相应参数的调整,但是需要的基础资源是 -Xms4g -Xmx4g , 初始堆和最大堆的内存要求是4G,如果达不到自然会说资源不够。方法就是根据自身情况,降低配置。
我这边2G内存的测试服务器配置如下:-server -Xms256m -Xmx256m -Xmn125m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m

补充: 关于日志的输出

简单看一下日志文件的配置 ~/conf/

rmq.broker.logback.xml
rmq.client.logback.xml
rmq.controller.logback.xml
rmq.namesrv.logback.xml
rmq-proxy.json
rmq.proxy.logback.xml
rmq.tools.logback.xml
            <fileNamePattern>${user.home}${file.separator}logs${file.separator}rocketmqlogs${file.separator}otherdays${file.separator}namesrv_traffic.%i.log.gz</fileNamePattern>

如果没有输出到项目根目录 ~/logs 的文件夹内,极有可能是这个参数无法获取或者获取为空的情况。

当前部署的用户是什么用户?并且需要理解 ${user.home} 这个参数

  • 如果是root用户,比如测试用的root用户,${user.home} 指的是 /root,那么日志会在 /root/logs
  • 如果正常生产一般是一个用户级别目录 比如rmq用户, ${user.home} 指的是 /home/rmq,那么日志会在 /home/rmq/logs
/root下
.
├── logs
│   └── rocketmqlogs
│       ├── broker_default.log
│       ├── broker.log
│       ├── commercial.log
│       ├── filter.log
│       ├── lock.log
│       ├── namesrv_default.log
│       ├── namesrv.log
│       ├── namesrv_traffic.log
│       ├── otherdays
│       ├── pop.log
│       ├── protection.log
│       ├── proxy.log
│       ├── proxy_metric.log
│       ├── proxy_watermark.log
│       ├── remoting.log
│       ├── stats.log
│       ├── storeerror.log
│       ├── store.log
│       ├── tools_default.log
│       ├── tools.log
│       ├── transaction.log
│       └── watermark.log
└── store
    ├── abort.bak
    ├── checkpoint
    ├── commitlog
    │   └── 00000000000000000000
    ├── compaction
    │   ├── position-checkpoint
    │   └── position-checkpoint.bak
    ├── config
    │   ├── consumerFilter.json
    │   ├── consumerFilter.json.bak
    │   ├── consumerOffset.json
    │   ├── consumerOffset.json.bak
    │   ├── consumerOrderInfo.json
    │   ├── consumerOrderInfo.json.bak
    │   ├── delayOffset.json
    │   ├── delayOffset.json.bak
    │   ├── subscriptionGroup.json
    │   ├── subscriptionGroup.json.bak
    │   ├── timercheck
    │   ├── timermetrics
    │   ├── timermetrics.bak
    │   ├── topics.json
    │   └── topics.json.bak
    ├── consumequeue
    │   └── dataTopic2
    ├── index
    │   └── 20240103133439115
    ├── lock
    └── timerwheel

如果想大调整log日志输出的地方,就可以针对 .logback.xml 里面 <fileNamePattern>${user.home} 手动调整,修改为期望的地方再启动即可。

可执行包部署 Broker

是 RocketMQ 的消息代理服务器,负责接收、处理和存储消息

此处测试使用Local模式启动,推荐使用Local模式,同时也支持Cluster模式

对于Local模式

启动的同时,开始proxy

$ nohup sh bin/mqbroker -n localhost:9876 --enable-proxy &
[2] 111778
[~ rocketmq]# nohup: ignoring input and appending output to 'nohup.out'

rocketmq]# tail -f ~/logs/rocketmqlogs/proxy.log 
}
2024-01-08 10:13:21 INFO main - ServiceProvider loaded no AccessValidator, using default org.apache.rocketmq.acl.plain.PlainAccessValidator
2024-01-08 10:13:22 INFO main - grpc server has built. port: 8081, tlsKeyPath: 1, tlsCertPath: 4, threadPool: 136314880, queueCapacity: {}, boosLoop: {}, workerLoop: {}, maxInboundMessageSize: {}
2024-01-08 10:13:22 INFO main - Server is running in TLS permissive mode
2024-01-08 10:13:22 INFO main - Using OpenSSL provider
2024-01-08 10:13:22 INFO main - SSLContext created for server
2024-01-08 10:13:23 INFO main - The broker[broker-a, xx.xx.xx.xx:10911] boot success. serializeType=JSON and name server is xx.xx.xx.xx:9876
2024-01-08 10:13:23 INFO main - user specified name server address: xx.xx:xx:xx:9876
2024-01-08 10:13:23 INFO main - grpc server start successfully.
2024-01-08 10:13:23 INFO main - Mon Jan 08 10:13:23 CST 2024 rocketmq-proxy startup successfully

启动broker,如果连接的namesrv是有公网IP等,需要明确配置 应用目录/conf/broker.conf
如不配置,可能存在连接超时、无法连接的故障,都是因为这边没配对而连接不上

[root@iZ2ze72qvclbhzjoaz5c2jZ conf]# cat broker.conf 
# nameServer 地址多个用;隔开 默认值null
# 例:127.0.0.1:6666;127.0.0.1:8888 
namesrvAddr = 127.0.0.1:9876
# 集群名称 单机配置可以随意填写,如果是集群部署在同一个集群中集群名称必须一致类似Nacos的命名空间
brokerClusterName = DefaultCluster
# broker节点名称 单机配置可以随意填写,如果是集群部署在同一个集群中节点名称不要重复
brokerName = broker-a
# broker id节点ID, 0 表示 master, 其他的正整数表示 slave,不能小于0 
brokerId = 0
# Broker 对外服务的监听端口 默认值10911
# 端口(注意:broker启动后,会占用3个端口,分别在listenPort基础上-2,+1,供内部程序使用,所以集群一定要规划好端口,避免冲突)
listenPort=10911
# Broker服务地址	String	内部使用填内网ip,如果是需要给外部使用填公网ip
brokerIP1 = 127.0.0.1
# BrokerHAIP地址,供slave同步消息的地址 内部使用填内网ip,如果是需要给外部使用填公网ip
brokerIP2 = 127.0.0.1

# Broker角色 默认值ASYNC_MASTER
# ASYNC_MASTER 异步复制Master,只要主写成功就会响应客户端成功,如果主宕机可能会出现小部分数据丢失
# SYNC_MASTER 同步双写Master,主和从节点都要写成功才会响应客户端成功,主宕机也不会出现数据丢失
# SLAVE
brokerRole = ASYNC_MASTER
# 刷盘方式
# SYNC_FLUSH(同步刷新)相比于ASYNC_FLUSH(异步处理)会损失很多性能,但是也更可靠,所以需要根据实际的业务场景做好权衡,默认值ASYNC_FLUSH
flushDiskType = ASYNC_FLUSH
# 在每天的什么时间删除已经超过文件保留时间的 commit log,默认值04
deleteWhen = 04
# 以小时计算的文件保留时间 默认值72小时
fileReservedTime = 72

# 消息大小 单位字节 默认1024 * 1024 * 4
maxMessageSize=4194304

# 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数,默认值4
defaultTopicQueueNums=4
# 是否允许Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

# 失败重试时间,默认重试16次进入死信队列,第一次1s第二次5s以此类推。
# 延时队列时间等级默认18个,可以设置多个比如在后面添加一个1d(一天),使用的时候直接用对应时间等级即可,从1开始到18,如果添加了第19个直接使用等级19即可
messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h

# 指定TM在20秒内应将最终确认状态发送给TC,否则引发消息回查。默认为60秒
transactionTimeout=20
# 指定最多回查5次,超过后将丢弃消息并记录错误日志。默认15次。
transactionCheckMax=5
# 指定设置的多次消息回查的时间间隔为10秒。默认为60秒。
transactionCheckInterval=10
对于Cluster模式
### On machine A, start the first Master, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-noslave/broker-a.properties --enable-proxy &
 
### On machine A, start the second Master, for example, the IP of the NameServer is: 192.168.1.1
$ nohup sh bin/mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-noslave/broker-b.properties --enable-proxy &

...

-n 多个IP的话使用英文分号隔离,192.168.1.1:9876;192.161.2:9876

对于 Proxy

是 RocketMQ 的代理服务器,用于扩展消息代理服务器的性能和容量

  • Local 模式下,Broker 和 Proxy 是同进程部署
  • Cluster 模式下,Broker 和 Proxy 是分开部署

官方没有文档描述docker部署的细节,主要与可执行脚本的指令是一致的,下面做一下测试

Docker部署 NameServer

原理是结合docker的指令,去调起一个容器,可以从外部挂载配置文件、日志、存储,并且可以通过命令行参数传入动态配置

前置就是 docker search rocketmq & docker pull rocketmq 想要具体的tag的话,docker pull rocketmq:5.1.4

docker run -d \  
--privileged=true \
#容器的名称
--name rmqnamesrv \ 
#容器映射的端口
-p 9876:9876 \
# 挂载日志文件
-v ~/rocketmq5/nameserver/logs:/home/rocketmq/logs \
# 挂载数据存储
-v ~/rocketmq5/nameserver/store:/home/rocketmq/store \
# 挂载可执行文件,主要为了方便修改参数
-v ~/rocketmq5/nameserver/bin/runserver.sh:/home/rocketmq/rocketmq-5.1.4/bin/runserver.sh \
# 动态指定所需的资源,这边是测试降低资源要求,否则默认4G
-e "MAX_HEAP_SIZE=256M" -e "HEAP_NEWSIZE=128M" \
# 熟悉的启动指令
apache/rocketmq:5.1.4 sh mqnamesrv

查看日志是否启动成功,这块由于日志挂载出来了,就可以在外部查看

The Name Server boot success. serializeType=JSON, address 0.0.0.0:9876

Docker部署 Broker

和NameServer是一致的,将配置、日志、存储外置,便于控制。此外如果是测试环境条件拮据的话,还要适当调整参数。

docker run -d \
# 容器名称
--name rmqbroker \
# broker与namesrv的连接
--link rmqnamesrv:namesrv \
# 暴露的端口,针对5.0开启proxy的场景,需要映射出8081端口
-p 10911:10911 -p 10909:10909 -p 8081:8081 \
--privileged=true \
# 挂载日志文件
-v ~/rocketmq5/broker/logs:/home/rocketmq/logs  \
# 挂载存储
-v ~/rocketmq5/broker/store:/home/rocketmq/store  \
# 挂载配置
-v ~/rocketmq5/broker/conf/broker.conf:/home/rocketmq/broker.conf  \
# 启动指令,runbroker.sh含动态的资源参数可供下面传入
-v ~/rocketmq5/broker/bin/runbroker.sh:/home/rocketmq/rocketmq-5.1.4/bin/runbroker.sh \
# 限定资源,如果测试环境拮据这块是需要指定的,映射namesrv
-e "MAX_HEAP_SIZE=256M"  -e "HEAP_NEWSIZE=128M" -e "NAMESRV_ADDR=namesrv:9876" \
# 启动指令,与可执行文件启动类似
apache/rocketmq:5.1.4  sh mqbroker -c /home/rocketmq/broker.conf  --enable-proxy

broker.conf 里面就是配置连接的数据,与前面配置类似

确定启动成功

Mon Jan 08 07:32:32 UTC 2024 rocketmq-proxy startup successfully

以上为一个参考官方文档进行 RocketMQ5.0 本地测试的流程,搭建后用于体验新版本功能

更多高端、生产配置指导见官方文档

后续加更Skywalking & RocketMQ的碰撞,感兴趣的话留个关注吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1367829.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AcrelEMS-BP生物制药能效管理系统——安科瑞 顾烊宇

​01 行业方案 02 项目案例 安科瑞 顾烊宇

Koodo Reader : 一个开源免费的电子书阅读器

今天在浏览 GitHub 的时候&#xff0c;偶然发现了一个非常有趣的开源项目——Koodo Reader。这个项目是一款开源免费的电子书阅读器&#xff0c;支持多种格式。它具有一些非常独特的功能&#xff0c;深深地吸引了我的注意。在接下来的内容中&#xff0c;我将为大家详细介绍一下…

oracle 12c pdb expdp/impdp 数据导入导出

环境 (源)rac 环境 byoradbrac 系统版本&#xff1a;Red Hat Enterprise Linux Server release 6.5 软件版本&#xff1a;Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit byoradb1&#xff1a;172.17.38.44 byoradb2&#xff1a;172.17.38.45 (目的&am…

升级 Vite 5 出现警告 The CJS build of Vite‘s Node API is deprecated.

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

一、二进制方式 安装部署K8S

目录 一、操作系统初始化 1、关闭防火墙 2、关闭 SELinu 3、 关闭 swap 4、添加hosts 5、同步系统时间 二、集群搭建 —— 使用外部Etcd集群 1、自签证书 2、自签 Etcd SSL 证书 ① 创建 CA 配置文件&#xff1a;ca-config.json ② 创建 CA 证书签名请求文件&#xff…

how2heap-2.23-12-house_of_spirit

house_of_spirit 注意事项 house_of_spirit&#xff1a;将一个地址伪造成符合fast bin大小的chunk&#xff0c;将其释放进fastbin中&#xff0c;同时伪造其中的fd指针&#xff0c;达到任意地址分配 伪造的chunk的大小&#xff0c;为什么是fast bin大小范围内的chunk&#xff…

将项目同时提交到GitHub和码云Gitee上面,GitHub与Gitee同步

多个远程仓库同时使用 新建GitHub仓库 创建成功 在终端中创建仓库 如果你想在本地机器上创建Git仓库&#xff0c;或者想添加一个文件夹或文件到已经存在的Git仓库中&#xff0c;你应该在终端中创建你的Git仓库。在你可以通过终端来创建一个Git仓库。以下是在终端中创建Git仓…

【基础工具篇使用】ADB 的安装和使用

文章目录 ADB的命令安装ADB 命令使用查看帮助 ——adb help查看连接设备 ADB的命令安装 ADB 命令的全称为“Android Debug Bridge”&#xff0c;从英文中看出主要是用作安卓的调试工具。ADB 命令在嵌入式开发中越来越常用了 在 Windows 上按“win”“R”组合件打开运行, 输入 …

1.框架介绍项目环境配置与项目启动!

目录 1.框架开发方向:2.项目启动与环境搭建 1.框架开发方向: 1.前后端分离项目 2.纯后端项目 3.移动端开发uni-app(ios、Android、H5、微信小程序) 4.内容管理系统2.项目启动与环境搭建 1.安装node.js 下载地址可以用nvm安装 便于运行前端项目https://blog.csdn.net/qq_58647…

【FPGA】分享一些FPGA入门学习的书籍

在做FPGA工程师的这些年&#xff0c;买过好多书&#xff0c;也看过好多书&#xff0c;分享一下。 后续会慢慢的补充书评。 【FPGA】分享一些FPGA入门学习的书籍【FPGA】分享一些FPGA协同MATLAB开发的书籍 【FPGA】分享一些FPGA视频图像处理相关的书籍 【FPGA】分享一些FPGA高速…

【数据结构 | 二叉树入门】

数据结构 | 二叉树入门 二叉树概念&#xff1a;二叉树特点&#xff1a;二叉树的基本形态特殊二叉树满二叉树完全二叉树 二叉树的存储结构二叉树的遍历先序遍历中序遍历后序遍历 计算二叉树的节点个数计算叶子节点的个数树的高度求第k层节点个数 二叉树概念&#xff1a; 如下图…

Vue3+TS+Vite 构建自动导入开发环境

关注⬆️⬆️⬆️⬆️ 专栏后期更新更多前端内容 在一个使用 Vue 3、Vite 和 TypeScript 的项目中,配置 unplugin-auto-import 和 unplugin-vue-components 插件可以极大地提高开发效率,因为它们可以自动导入 Vue 相关的 API 和 Vue 组件,从而减少了手动导入的需要。 文章目…

【一文详解】知识分享:(MySQL关系型数据库快速入门)

mysql基础 数据类型 整型 类型名称取值范围大小TINYINT-128〜1271个字节SMALLINT-32768〜327672个宇节MEDIUMINT-8388608〜83886073个字节INT (INTEGHR)-2147483648〜21474836474个字节BIGINT-9223372036854775808〜92233720368547758078个字节 注: 无符号在数据类型后加 un…

TypeScript 和 jsdom 库创建爬虫程序示例

TypeScript 简介 TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集&#xff0c;可以编译生成纯 JavaScript 代码。TypeScript 增加了可选的静态类型和针对对象的编程功能&#xff0c;使得开发更加大规模的应用容易。 jsdom 简介 jsdom 是一个…

基于单片机设计的智慧农业大棚检测系统

一、设计目标 本项目基于单片机设计一个智慧农业大棚检测系统&#xff0c;以提供实时监测和管理大棚环境的关键参数。系统支持环境温度、湿度检测&#xff0c;光照强度检测&#xff0c;并能根据预设的阀值进行报警提示。为了实现数据的显示和管理&#xff0c;该系统还利用Qt开…

day-03 回旋镖的数量

思路&#xff1a; 用map集合记录相同距离的组合数,HashMap<Integer,Integer>&#xff0c;前一个值表示距离&#xff0c;后一个值表示组合数 解题方法&#xff1a; 用两次for循环&#xff0c;记录相同距离的组合数&#xff0c;统计出总的可行组合数&#xff0c;组合数*2即…

大模型生成解码参数速查

控制输出长度的参数 控制所使用的生成策略的参数 用于操作模型输出 logits 的参数 定义“generate”输出变量的参数 可以在生成时使用的特殊字符

【React源码 - Fiber架构之Reconciler】

前言 React16架构可以分为三层也是最核心的三个功能分别是&#xff1a; Scheduler&#xff08;调度器&#xff09;—调度任务的优先级&#xff0c;高优任务优先进入Reconciler(16新增)Reconciler&#xff08;协调器&#xff09;—负责找出变化的组件Renderer&#xff08;渲染…

OpenHarmony基于HDF简单驱动开发实例

背景 OpenHarmony-3.0-LTSqemu_small_system_demoliteos_aqemu 添加配置 device/qemu/arm_virt/liteos_a/hdf_config/device_info/device_info.hcs device_info 新增&#xff1a; sample_host :: host {hostName "sample_host";sample_device :: device {devic…

使用 Docker 和 Diffusers 快速上手 Stable Video Diffusion 图生视频大模型

本篇文章聊聊&#xff0c;如何快速上手 Stable Video Diffusion (SVD) 图生视频大模型。 写在前面 月底计划在机器之心的“AI技术论坛”做关于使用开源模型 “Stable Diffusion 模型” 做有趣视频的实战分享。 因为会议分享时间有限&#xff0c;和之前一样&#xff0c;比较简…