moleculer-repl 是 Moleculer 專用的開發者互動式主控台。你可以利用它來得到目前服務相關資訊,也可以對服務下達一些動作或事件。
npm install moleculer-repl --save
在 Broker 啟動後切換到 REPL 模式。
const broker = new ServiceBroker();
broker.start().then(() => {
    // 切換到 REPL 模式
    broker.repl();
});
Commands:
  actions [options]                                          actions 清單
  bench [options] <action> [jsonParams] [meta]               測量服務 action
  broadcast <eventName>                                      廣播事件
  broadcastLocal <eventName>                                 本地廣播事件
  cache                                                      快取訊息
  call [options] <actionName> [jsonParams] [meta]            呼叫 Action
  dcall [options] <nodeID> <actionName> [jsonParams] [meta]  Direct call action
  clear [pattern]                                            清除快取實體
  cls                                                        清除主控台
  destroy <serviceName>                                      銷毀一個本地服務
  emit <eventName>                                           發送事件
  env                                                        環境變數清單
  events [options]                                           事件監聽清單
  info                                                       顯示常用資訊
  listener                                                   新增移除事件監聽
  load <servicePath>                                         從檔案讀取服務
  loadFolder <serviceFolder> [fileMask]                      由目錄讀取所有服務
  metrics [options]                                          Metrics 清單
  nodes [options]                                            節點清單
  exit|q                                                     離開應用
  services [options]                                         服務清單
  help [command]                                             指令說明
mol $ nodes
選項:
-a, --all             所有節點清單(包含離線節點)
-d, --details         詳細清單
-f, --filter <match>  過濾節點 (例如: 'node-*')
--raw                 輸出註冊表到 JSON
--save [filename]     儲存註冊表到 JSON 檔案
輸出結果:

Fig. 1. 節點一般輸出結果
詳細輸出結果:

Fig. 2. 節點詳細輸出結果
mol $ services
選項:
-a, --all             所有服務清單 (包含離線服務)
-d, --details         印出詳細端點資訊
-f, --filter <match>  過濾服務 (例如: 'user*')
-i, --skipinternal    跳過內部服務
-l, --local           僅本地服務
輸出:

Fig. 3. 服務一般輸出結果
詳細輸出結果:

Fig. 4. 服務詳細輸出結果
mol $ actions
選項:
-a, --all             所有 Action 清單(包含離線 Action )
-d, --details         印出詳細端點資訊
-f, --filter <match>  過濾 actions (例如: 'users.*')
-i, --skipinternal    跳過內部 actions
-l, --local           僅本地 actions

Fig. 5. Actions 一般輸出結果

Fig. 6. Actions 詳細輸出結果
mol $ events
選項:
-a, --all             所有事件清單(包含離線事件)
-d, --details         印出詳細端點資訊
-f, --filter <match>  過濾事件監聽器 (例如: 'user.*')
-i, --skipinternal    跳過內部事件監聽器
-l, --local           僅本地事件監聽器

Fig. 7. 事件一般輸出結果

Fig. 8. 事件詳細輸出結果
mol $ info

Fig. 9. info 輸出結果
mol $ env
mol $ call "test.hello"

Fig. 10. call 輸出結果
選項:
--help               指令說明
--load [filename]    由檔案讀取參數
--stream [filename]  發送一個串流檔案
--save [filename]    儲存響應的檔案
範例:夾帶參數來呼叫 Action 。
# 參數: `{ a: 5, b: 'Bob', c: true, d: false, e: { f: 'hello' } }`
mol $ call "math.add" --a 5 --b Bob --c --no-d --e.f "hello"
範例:夾帶參數、 meta 及選項來呼叫 Action 。
# 參數: `{ a: 5 }`
# Meta : `{ b: 'Bob' }`
# 選項: `{ timeout: 1 }`
mol $ call "math.add" --a 5 --#b Bob --$timeout 1
範例:夾帶 JSON 字串參數來呼叫 Action 。
# 參數: `{ a: 5, b: 'Bob', c: true, d: { e: 'hello' } }`
mol $ call "math.add" '{"a": 5, "b": "Bob", "c": true, "d": { "e": "hello" } }'
範例:夾帶參數檔來呼叫 Action ,會嘗試讀取當前目錄的 math.add.params.json 檔案。
mol $ call "math.add" --load
範例:夾帶參數檔來呼叫 Action ,會讀取指定的 my-params.json 檔案。
mol $ call "math.add" --load my-params.json
範例:夾帶串流檔案來呼叫 Action ,它會讀取 my-picture.jpg 然後以串流形式發送到 photo.add action 。
mol $ call "photo.add" --stream my-picture.jpg
範例:呼叫 Action 後儲存響應的檔案。
它會將響應的資料儲存到當前目錄的
photo.download.response.stream,假如響應的是物件則副檔名會是.json,如果是純文字則副檔名會是.txt。
mol $ call "photo.download" --save
範例:呼叫 Action 後指定儲存響應的檔案。
mol $ call "photo.download" --save my-response.jpg
dcall 的用法與 call 幾乎相同,差異在於可以指定節點。
範例:指定節點呼叫 Action
mol $ dcall "node-12" "$node.health"
mol $ emit "user.created"
範例:夾帶參數來發送事件。
# 參數: `{ a: 5, b: 'Bob', c: true, d: false, e: { f: 'hello' } }`
mol $ emit "user.created" --a 5 --b Bob --c --no-d --e.f "hello"
範例:夾帶參數、 meta 及選項來發送事件。
# 參數: `{ a: 5 }`
# Meta : `{ b: 'Bob' }`
# 選項: `{ groups: 'abc' }`
mol $ emit "user.created" --a 5 --#b Bob --$groups abc
bench 指令可以用來測量你的服務,得到一些時間統計資訊。
# 呼叫一個服務 Action 5 秒
mol $ bench math.add
# 呼叫一個服務 Action 5000 次
mol $ bench --num 5000 math.add
# 呼叫一個服務 Action 30 秒
mol $ bench --time 30 math.add
選項:
--num <number>     迭代次數
--time <seconds>   持續時間
--nodeID <nodeID>  節點 ID (direct call)

Fig. 11. Bench 輸出結果
範例:夾帶 JSON 字串參數來測量。
注意,你只能使用 JSON 字串作為參數。
mol $ bench math.add '{ "a": 50, "b": 32 }'
mol $ load "./math.service.js"
mol $ load "./services"
mol $ metrics
選項:
-f, --filter <match>  過濾 metrics (例如: 'moleculer.**')

Fig. 12. Metrics 輸出結果
cache keys 指令可以列出快取清單。
選項:
-f, --filter <match>  過濾鍵值
cache clear 指令可以清除所有的快取實體。
mol $ cache clear
範例:依匹配規則清除快取。
mol $ cache clear greeter.*
listener 指令可以用來訂閱與監聽事件。
範例:訂閱事件。
mol $ listener add user.created
範例:訂閱群組事件。
mol $ listener add user.created --group abcd
範例:取消訂閱。
mol $ listener remove user.created
範例:列出 REPL 監聽的事件清單。
mol $ listener list
你也可以在配置檔中建立多個客製化命令。
moleculer.config.js
module.exports = {
    replCommands: [
        {
            command: "hello <name>",
            description: "Call the greeter.hello service with name",
            alias: "hi",
            options: [
                { option: "-u, --uppercase", description: "Uppercase the name" }
            ],
            types: {
                string: ["name"],
                boolean: ["u", "uppercase"]
            },
            // parse(command, args) {},
            // validate(args) {},
            // help(args) {},
            allowUnknownOptions: true,
            action(broker, args, helpers) {
                const name = args.options.uppercase ? args.name.toUpperCase() : args.name;
                return broker.call("greeter.hello", { name }).then(console.log);
            }
        }
    ]
};
結果:
mol $ hello -u John
Hello JOHN
[1] REPL console, https://moleculer.services/docs/0.14/moleculer-repl.html