BlazingMQ 0.95.20 常用 CLI 命令详解

逐条实测 BlazingMQ v0.95.20 命令行工具链:bmqbrkr 启停与版本查看、bmqtool 交互模式收发闭环(单会话、跨会话生产消费、batch-post 自增属性)、storage 模式存储文件离线检查,以及自定义域队列的实操入口与常见排障。

BlazingMQ消息队列与流处理2026/10/23

BlazingMQ 0.95.20 常用 CLI 命令详解

目标:系统讲清 BlazingMQ 命令行工具链的日常用法——消息代理 bmqbrkr 的启动/停止/版本查看,官方多模式工具 bmqtool 的交互收发(单会话、跨会话生产消费、批量发送)、存储文件离线检查(storage 模式),以及域配置文件的生效方式。全部命令与回显均在 Ubuntu 22.04 + BlazingMQ v0.95.20 单节点环境实测取得(部署形态见《Ubuntu 22.04 部署 BlazingMQ 0.95.20 指南》,版本与选型背景见 《BlazingMQ 介绍与选型指南》)。

一、环境信息

  • 操作系统:Ubuntu 22.04 LTS;
  • 软件版本:BlazingMQ v0.95.20(2026-08-24 官方 git tag,2026-10-23 查询);
  • 部署形态:官方单节点 compose 模板(服务 bmqbrkr + bmqtool),代理配置目录挂载到容器内 /etc/local/bmq,数据目录 /var/local/bmq;
  • 组件与二进制:bmqbrkr(消息代理)、bmqtool(官方 CLI,与代理同镜像分发,路径 /usr/local/bin/bmqtool);
  • 代理监听端口:30114(BMQP 二进制协议),宿主机映射为 8134。

二、工具概览

BlazingMQ 的命令行工具链由两个程序组成,均随官方镜像或源码构建一并分发:

程序角色典型用途
bmqbrkr消息代理主程序前台启动代理、指定配置目录、查看版本
bmqtool官方 CLI 多模式工具交互收发消息、自动化压测(auto)、存储文件离线检查(storage)、系统检查(syschk)

2.1 bmqtool 的四种运行模式

bmqtool --help 实测回显(节选):

Usage: bmqtool [--mode <mode>] [-b|broker <address>] [-q|queueuri <uri>]
               [-f|queueflags <flags>] [-l|latency <latency>]
               [--latency-report <report.json>] [-d|dumpmsg] [-c|confirmmsg]
               [-e|eventsize <evtSize>] [-m|msgsize <msgSize>]
               [-r|postrate <rate>] [--eventscount <events>]
               [-u|maxunconfirmed <unconfirmed>] [-i|postinterval <interval>]
               [-v|verbosity <verbosity>] [--logFormat <logFormat>]
               [-D|memorydebug] [-t|threads <threads>]
               [--shutdownGrace <shutdownGrace>] [--nosessioneventhandler]
               [-s|storage <storage>] [--log <log>] [--profile <profile>]
               [-h|help] [--dumpprofile]
               [--messagepattern <sequential message pattern>]
               [--messageProperties <MessageProperties>]
               [--subscriptions <Subscriptions>]
               [--autoPubSubModulo <autoPubSubModulo>] [--timeout <timeout>]
               [--authnMechanism <mechanism>] [--authnData <data>]
Where:
       --mode                   <mode>
          mode ([<cli>, auto, storage, syschk])
  -b | --broker                 <address>
          address and port of the broker (default: tcp://localhost:30114)

(--help 退出码为 1,属工具设计如此;完整帮助以本地 bmqtool --help 输出为准。)

四种模式的分工:

模式进入方式用途
cli(默认)bmqtool -b tcp://<代理>:30114交互式 REPL,逐条执行 start/open/post/list/confirm 等命令
auto--mode auto -q <队列URI> -f <flags>自动化生产者/消费者,按 --eventscount/--postrate 批量收发
storagebmqtool --mode storage离线打开代理存储文件(qlist/journal/data),检查队列与记录
syschkbmqtool --mode syschk -q <队列URI>系统连通性检查

2.2 代理侧与容器形态下的调用入口

官方单节点 compose 模板中 bmqtool 服务本身即时退出,仅作为与代理同网络的"工具跳板"存在(官方注释原文:"This 'service' will exit immediately... to be started in interactive mode with docker-compose run")。因此命令行操作统一从工具服务发起,本文全部示例采用两种等价形态之一:

# 形态一:一次性管道驱动(本文实测采用,输出可留存)
docker compose run --rm -T bmqtool bash -c 'printf "start\nbye\n" | bmqtool -b tcp://bmqbrkr:30114'

# 形态二:交互式 REPL
docker compose run --rm bmqtool bmqtool -b tcp://bmqbrkr:30114

三、前置条件

  1. 代理已在运行(部署过程见《Ubuntu 22.04 部署 BlazingMQ 0.95.20 指南》):
$ docker compose ps bmqbrkr
NAME                     IMAGE           COMMAND                  SERVICE   CREATED        STATUS        PORTS
blazingmq-09520-bmqbrkr  bmqbrkr:latest  "/usr/local/bin/bmqbr…"  bmqbrkr   2 minutes ago  Up 2 minutes  0.0.0.0:8134->30114/tcp, [::]:8134->30114/tcp
  1. 代理端口监听确认(宿主机侧):
$ ss -ltn | grep 8134
LISTEN 0      4096         0.0.0.0:8134      0.0.0.0:*     users:(("docker-proxy",pid=21460,fd=4))
  1. 默认域 bmq.test.persistent.priority 已随官方配置加载(队列 qqq 无需预建,首次 open 时自动创建)。

四、bmqbrkr 代理命令详解

4.1 命令行语法与版本查看

bmqbrkr 传入无法识别的参数即可触发官方 usage 打印(实测 --badoption):

PANIC [STARTUP] Failed to parse command line

Usage: bmqbrkr [-i|instanceId <instanceId>] [-h|hostName <hostName>]
               [-t|hostTags <hostTags>] [-d|hostDataCenter <hostDataCenter>]
               [-p|port <port>] [-v|version] [<config>]
Where:
  -i | --instanceId      <instanceId>
          The instance ID ('default' if not provided)
  -h | --hostName        <hostName>
          Override host name
  -t | --hostTags        <hostTags>
          Override host tags
  -d | --hostDataCenter  <hostDataCenter>
          Override host data center
  -p | --port            <port>
          Override port
  -v | --version
          Show broker version number

要点:

  • bmqbrkr 没有 --help 长选项,直接传 --help 会以 PANIC 退出(用法查看见上);
  • <config> 位置参数是配置目录路径,官方 compose 中即 /etc/local/bmq;
  • 版本查看实测:
$ bmqbrkr -v
BlazingMQ broker version: BLP_LIB_BMQBRKR_99.99.99

回显中的 99.99.99 是因为官方示例配置 clusters.json 将 brokerVersion 设为 999999,代理对外通告该值;源码版本以构建所用 git tag(v0.95.20)为准。

4.2 启动与停止

compose 形态下代理由服务编排托管,启动/停止命令:

$ docker compose up -d bmqbrkr        # 启动
$ docker compose stop bmqbrkr         # 优雅停止
$ docker compose start bmqbrkr        # 再次启动

优雅停止时代志实录(docker logs 节选):

STOPPING bmqbrkr [pid: 1]
23OCT2026_12:12:12.079 INFO mqba_application.cpp:490 : Executing GRACEFUL_SHUTDOWN_V2

代理收到 SIGTERM 后执行 GRACEFUL_SHUTDOWN_V2,集群状态落盘后退出,再次启动会从既有存储恢复(Cluster (local): Received state-restore event for Partition [0])。

4.3 进程级运行参数(hostName 等)

-h 可覆盖主机名。实测环境容器 hostname 为 gallifrey,而代理配置与工具容器主机名为 earth,代理日志与 GUID 生成均显示 hostname: 'earth',单节点收发不受影响;但多节点集群部署时各节点主机名必须与 clusters.json 中登记的节点名一致,否则选举与节点互认失败。

4.4 直接前台运行(排障用)

排查配置问题时可绕过编排直接前台启动,实测无参运行会因缺少 <config> 立即报错退出:

Error: No value supplied for the non-option argument "config."

正确形态即 compose 中的 command:

bmqbrkr /etc/local/bmq

五、bmqtool 交互模式命令详解

5.1 命令总览

交互模式(默认 cli)进入后出现欢迎语,键入 help 查看命令清单:

Welcome to the BlazingMQ tool.
Type 'help' to see the list of commands. Crl-D to quit.

核心命令一组(官方 README 同款语义,全部实测):

命令语法作用
startstart建立到代理的会话
openopen uri="<队列URI>" flags="read,write,ack"打开队列(读/写/确认),首次打开自动建队
postpost uri="<队列URI>" payload=["<内容>"]发送一条消息
listlist列出本会话尚未确认(unconfirmed)的消息
confirmconfirm uri="<队列URI>" guid="<GUID>"确认消费指定 GUID 的消息
batch-postbatch-post uri="<队列URI>" payload=["..."] eventsCount=N ...批量发送,支持自增消息属性
closeclose uri="<队列URI>"关闭队列
stopstop结束会话
bye / quit / q—退出工具

5.2 单会话收发闭环(start → open → post → list → confirm)

一次性脚本实测(同一会话既生产又消费):

docker compose run --rm -T bmqtool bash -c '{
printf "start\n";                                        sleep 1
printf "open uri=\"bmq://bmq.test.persistent.priority/qqq\" flags=\"read,write,ack\"\n"; sleep 1
printf "post uri=\"bmq://bmq.test.persistent.priority/qqq\" payload=[\"hello world\"]\n"; sleep 2
printf "list\n";                                         sleep 1
printf "confirm uri=\"bmq://bmq.test.persistent.priority/qqq\" guid=\"<上一步list中的GUID>\"\n"; sleep 1
printf "stop\nbye\n"
} | bmqtool -b tcp://bmqbrkr:30114'

关键实测回显(日志节选,时间戳省略):

--> Starting session: [ async = false ]
--> Opening queue: [ uri = "bmq://bmq.test.persistent.priority/qqq" flags = "read,write,ack" ... ]
<-- session.openQueueSync() => SUCCESS ([ queueId = [ uri = bmq://bmq.test.persistent.priority/qqq ... ] result = "SUCCESS (0)" ])
--> Posting message: [ uri = "bmq://bmq.test.persistent.priority/qqq" payload = [ "hello world" ] ... ]
<-- session.post() => SUCCESS (0)
Unconfirmed message listing: 1 messages
  #  1  [40000000000067922389446D298A1314] Queue: '[ uri = bmq://bmq.test.persistent.priority/qqq ... ]' = 'hello world'
--> Confirming message with GUID 40000000000067922389446D298A1314
<-- session.confirmMessage() => SUCCESS (0)
Unconfirmed message listing: 0 messages

会话结束时工具打印统计表(节选):

#### stats [delta = last 300 seconds] ####
         | messages| events| bytes
---------+---------+-------+------
  PUT    |        1|      1|  56 B
  PUSH   |        1|      1|  60 B
  ACK    |        1|      1|  36 B
  CONTROL|         |      3| 216 B
  CONFIRM|         |       |

5.3 跨会话生产消费闭环(两个工具会话)

真实的"生产者/消费者"分离场景:先起消费者会话(open 后等待),再起生产者会话发送,观察消费者收到 PUSH 并确认。

消费者会话(等待收消息):

docker compose run --rm -T bmqtool bash -c '{
printf "start\n"; sleep 1
printf "open uri=\"bmq://bmq.test.persistent.priority/qqq\" flags=\"read,write,ack\"\n"; sleep 6
printf "list\nconfirm uri=\"bmq://bmq.test.persistent.priority/qqq\" guid=\"<GUID>\"\nstop\nbye\n"
} | bmqtool -b tcp://bmqbrkr:30114'

生产者会话(发送 msg-from-producer-42):

docker compose run --rm -T bmqtool bash -c '{
printf "start\n"; sleep 1
printf "open uri=\"bmq://bmq.test.persistent.priority/qqq\" flags=\"read,write,ack\"\n"; sleep 1
printf "post uri=\"bmq://bmq.test.persistent.priority/qqq\" payload=[\"msg-from-producer-42\"]\n"; sleep 2
printf "stop\nbye\n"
} | bmqtool -b tcp://bmqbrkr:30114'

消费者侧实测回显(节选):

==> EVENT received: [ type = "MESSAGE" rawEventType = PUSH ]
Unconfirmed message listing: 1 messages
  #  1  [400000000000779F034AE97AC5EB12B1] Queue: '[ uri = bmq://bmq.test.persistent.priority/qqq ... ]' = 'msg-from-producer-42'
--> Confirming message with GUID 400000000000779F034AE97AC5EB12B1
<-- session.confirmMessage() => SUCCESS (0)

消费端统计确认跨会话投递成功:

  PUT    |         |       |
  PUSH   |        1|      1|  72 B
  CONFIRM|        1|      1|  36 B

5.4 批量发送 batch-post 与自增消息属性

batch-post 按 eventsCount/postInterval/postRate 控制节奏,autoIncremented 为每条消息附加一个自增整型属性。官方示例参数形态实测:

docker compose run --rm -T bmqtool bash -c '{
printf "start\n"; sleep 1
printf "open uri=\"bmq://bmq.test.persistent.priority/qqq\" flags=\"read,write,ack\"\n"; sleep 1
printf "batch-post uri=\"bmq://bmq.test.persistent.priority/qqq\" payload=[\"sample message\"] eventsCount=5 postInterval=100 postRate=10 autoIncremented=\"x\"\n"; sleep 3
printf "list\n"; sleep 1
printf "confirm uri=\"bmq://bmq.test.persistent.priority/qqq\" guid=\"*\"\n"; sleep 1
printf "stop\nbye\n"
} | bmqtool -b tcp://bmqbrkr:30114'

实测回显(节选)——list 能看到消息携带自增属性 x:

All messages have been posted
Unconfirmed message listing: 2 messages
  #  1  [400001000000773C09BF3652A42FD224] Queue: '[ uri = bmq://bmq.test.persistent.priority/qqq ... ]' = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEF', with properties: [ x (INT64) = 1 ]
  #  2  [400003000000773C5D833652A42FD224] Queue: '[ uri = bmq://bmq.test.persistent.priority/qqq ... ]' = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEF', with properties: [ x (INT64) = 3 ]
--> Confirming message with GUID 400001000000773C09BF3652A42FD224
<-- session.confirmMessage() => SUCCESS (0)
--> Confirming message with GUID 400003000000773C5D833652A42FD224
<-- session.confirmMessage() => SUCCESS (0)

说明两点:

  • payload 未指定内容时,工具以 ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEF 为模板填充到默认 msgSize(1024 字节);
  • 上述 list 时刻列出了 2 条未确认消息(属性 x=1、x=3),代理侧统计 PUT 5 条已全部入库,未确认列表是滚动快照——这正是"先 list 拿 GUID 再 confirm"要在同一节奏内完成的原因。统计表(节选):
  PUT    |        5|      5| 5.35 KB
  PUSH   |        2|      1| 4.28 KB
  ACK    |        5|      2|   144 B
  CONFIRM|        2|      2|    72 B

confirm guid="*" 可一次确认本会话全部未确认消息(实测回显逐条 confirmMessage() => SUCCESS (0))。

5.5 自定义域队列收发(域即配置文件的实操入口)

BlazingMQ 没有运行时"建域"命令:域由配置目录 domains/*.json 定义,重启代理加载。实测新建 bmq.demo.persistent.workqueue 域(配置要点:storageDomain fileBacked、routing priority、maxConsumers 1,配置文件内容详见《BlazingMQ 0.95.20 配置参数详解》)后,重启代理日志确认加载:

Configuration loaded

随后对自定义域队列 demoq 的收发与默认域完全同构:

--> Opening queue: [ uri = "bmq://bmq.demo.persistent.workqueue/demoq" flags = "read,write,ack" ... ]
<-- session.openQueueSync() => SUCCESS ([ queueId = [ uri = bmq://bmq.demo.persistent.workqueue/demoq ... ] result = "SUCCESS (0)" ])
--> Posting message: [ uri = "bmq://bmq.demo.persistent.workqueue/demoq" payload = [ "hello workqueue domain" ] ... ]
<-- session.post() => SUCCESS (0)
Unconfirmed message listing: 1 messages
  #  1  [400000000000773A77DABC7D89F46E62] Queue: '[ uri = bmq://bmq.demo.persistent.workqueue/demoq ... ]' = 'hello workqueue domain'
<-- session.confirmMessage() => SUCCESS (0)

5.6 常用启动参数速查

以下参数均来自 bmqtool --help 实测输出,交互模式与 auto 模式共用:

参数说明(默认值)
-b, --broker <address>代理地址,默认 tcp://localhost:30114
-q, --queueuri <uri>auto/syschk 模式的队列 URI
-f, --queueflags <flags>auto 模式打开队列的 flags
-m, --msgsize <bytes>消息负载大小(1024)
-e, --eventsize <n>每事件消息数(1)
-r, --postrate <rate>每个 postinterval 发送的事件数(1)
-i, --postinterval <ms>发送间隔毫秒(1000)
--eventscount <events>发送事件总数,后缀 s 表示秒数(0 为不限)
-u, --maxunconfirmed <msgs:bytes>未确认消息上限(1024:33554432)
-v, --verbosity <级别>日志级别(info),可选 silent/trace/debug/info/warning/error/fatal
-t, --threads <threads>处理线程数
--shutdownGrace <seconds>auto 模式无消息活动后自动退出
-d, --dumpmsg打印收到消息的内容
-c, --confirmmsg收到消息自动确认

六、bmqtool storage 模式:存储文件离线检查

storage 模式直接读取代理数据目录中的三件套存储文件(*.bmq_qlist / *.bmq_journal / *.bmq_data),不连接代理也能检查,适合停机窗口做数据体检。

6.1 进入与 help

$ docker compose exec bmqbrkr bmqtool --mode storage
Welcome to the BlazingMQ tool storage inspector.
Type 'help' to see the list of commands supported by storage inspector. Ctrl-D to quit.
> help
Commands:
  open path=""
  close
  queues
  metadata
  dump uri="" (deleted=false) (messages=false)
  help
  quit
  bye

Data Commands:
  d n/next=1
  d p/prev=1
  d r/record=1
  d l/list=1

Qlist Commands:
  q n/next=1
  q p/prev=1
  q r/record=1
  q l/list=1

Journal Commands:
  j n/next=1
  j p/prev=1
  j r/record=1
  j l/list=1
  j type={"message", "confirm", "delete", "qop", "jop"}
  j dump="payload"

6.2 open 打开存储(path 通配三件套)

open 必须携带 path 参数,值以 * 结尾时同时打开前缀匹配的三类文件。实测(代理数据目录 /var/local/bmq/storage/):

> open path="/var/local/bmq/storage/bmq_0.20261023_115551*"
Data file: [/var/local/bmq/storage/bmq_0.20261023_115551.bmq_data] Journal file: [/var/local/bmq/storage/bmq_0.20261023_115551.bmq_journal] Qlist file: [/var/local/bmq/storage/bmq_0.20261023_115551.bmq_qlist]
Reading qlist file.
Finished reading qlist file with rc: -4

注意:不带参数的裸 open 直接报错 Invalid path provided in command.(实测)。

6.3 queues:队列实例清单

> queues
Total number of queue instances: 2
Queue #1
    Queue URI         : bmq://bmq.demo.persistent.workqueue/demoq
    QueueKey          : 4F47AF2F32
    Number of AppIds  : 1
        AppId #1
        AppId   : __default
        AppKey  : 3000000000

Queue #2
    Queue URI         : bmq://bmq.test.persistent.priority/qqq
    QueueKey          : FDEAF02193
    Number of AppIds  : 1
        AppId #1
        AppId   : __default
        AppKey  : 3000000000

实测环境两个队列实例(默认域 qqq 与自定义域 demoq)都在册,各含一个 __default AppId。

6.4 metadata:三类文件头与日志同步点

> metadata
Details of data file:
BlazingMQ File Header
    Protocol Version  : 1
    Bitness           : 64
    FileType          : DATA
    HeaderWords       : 8
    PartitionId       : 0

 Data File Header:
    HeaderWords       : 2
    FileId (FileKey)  : 0000000000

Details of qlist file:
BlazingMQ File Header
    Protocol Version  : 1
    Bitness           : 64
    FileType          : QLIST
    HeaderWords       : 8
    PartitionId       : 0

 Qlist File Header:
    HeaderWords  : 1

Details of journal file:
BlazingMQ File Header
    Protocol Version  : 1
    Bitness           : 64
    FileType          : JOURNAL
    HeaderWords       : 8
    PartitionId       : 0

Journal File Header:
    HeaderWords                           : 3
    RecordWords                           : 15
    ...
Journal SyncPoint:
    Last Valid Record Offset           : 2804
    Record Type                        : JOURNAL_OP
    Record Timestamp                   : 23OCT2026_12:17:36.000000
    SyncPoint SeqNum                   : 1
    SyncPoint Primary NodeId           : 0
    SyncPoint Primary LeaseId          : 5
    ...

(节选;Journal SyncPoint 段是集群恢复位点,单节点环境下 Primary NodeId 恒为 0。)

6.5 q/j/d 记录游标命令

q(qlist)、j(journal)、d(data)三组游标命令语法一致:n/next、p/prev、r/record、l/list。实测列举 journal 前 2 条记录:

> j l 2
Record Index: 0, Record Type: JOURNAL_OP
Record Index: 1, Record Type: QUEUE_OP

j type 可按类型跳转(message/confirm/delete/qop/jop),j dump="payload" 需 data 文件已打开,用于打印当前 message 记录的负载。

七、注意事项

  1. post 后立即 list 可能是 0 条:消息事件经代理回推存在毫秒级异步延迟,实测连发时 Unconfirmed message listing: 0 messages,间隔 1~2 秒后 list 即可见。脚本化操作务必在 post 与 list/confirm 之间保留 sleep 1 以上间隔。
  2. confirm 必须使用当前会话 list 输出的 GUID:实测用早前会话遗留的旧 GUID 确认会得到 '4000000000000051C1983CA2D36B3E43' NOT found,消息仍在未确认列表中。GUID 换会话即失效,先 list 后 confirm 是固定动作。
  3. batch-post 参数要用官方示例形态:实测把 msgSize=3 eventSize=3 eventsCount=1 与 payload=[...] 自行组合会让工具进入长时间等待;采用 payload=[...] eventsCount=N postInterval=P postRate=R(可加 autoIncremented="x")组合稳定。
  4. bmqbrkr 不支持 --help:传 --help 以 PANIC 退出。看版本用 -v,看用法传一个非法参数触发 usage 打印。
  5. storage 模式 open 必须带 path:裸 open 报 Invalid path provided in command.;path 以 * 结尾可一次打开同前缀三件套。
  6. 脚本杀进程避免 pkill -f 自匹配:pkill -f "bmqbrkr.tsk" 会把命令行里含同关键字的包装脚本一并杀掉(实测脚本因此无输出退出);应按精确进程名匹配(如 pkill -x bmqbrkr.tsk)。
  7. storage 检查不要求代理在线:三件套文件为普通磁盘文件,停机窗口亦可离线检查;代理运行时读取仅作只读观察,不产生写入。

八、常见问题

Q1:bmqbrkr --help 为什么直接 PANIC? 代理命令行解析不含 help 长选项,非法参数统一走 PANIC [STARTUP] Failed to parse command line 并打印 usage。这是官方设计而非故障,用法以 usage 输出与官方文档为准。

Q2:post 返回 SUCCESS,为什么 list 是 0 条? post 的 SUCCESS 表示消息已提交代理(并收到 ACK 事件),而 list 展示的是经 PUSH 事件回推到本会话的未确认快照,两者异步。保留 1~2 秒间隔再 list(详见 §七.1)。

Q3:confirm 报 'xxx' NOT found? GUID 不属于当前会话当前未确认集合——多为复用了旧会话/旧消息的 GUID。重新 list 取最新 GUID 再确认。

Q4:open/post 报 'uri' is mandatory 或 Invalid scheme: uri must start with "bmq://"? 命令参数缺失或格式错误:uri= 必填且必须是完整队列 URI(bmq://<域名>/<队列名>)。管道驱动时注意引号转义,建议外层单引号包裹整体脚本、内层转义双引号。

Q5:storage 模式下 q l/j l 报 You must open a qlist file to use that command.? 游标命令依赖已打开的对应文件。先执行 open path="<存储文件前缀>*" 成功(回显三件套路径)后再使用 q/j/d 命令。

Q6:队列需要预先"创建"吗? 不需要独立命令。队列在其所属域的策略下于首次 open 时自动创建并分配 QueueKey(storage 模式 queues 可见);域本身则由 domains/*.json 配置文件定义、重启代理生效(见 §5.5 与《BlazingMQ 0.95.20 配置参数详解》)。

九、参考链接