# AI 與訊息

Source: https://gortexa.sheng.page/examples/messaging/

## 10 export-cli — AI tool schema 匯出

`gortexa export` 對所有 `gortexa.ai.v1` 標注的方法，輸出三種 provider 格式的有效 JSON schema，不需要跑起 server。

```bash
for fmt in mcp openai gemini; do
  gortexa export --format "$fmt"      # 皆輸出有效 JSON，且含 resource 相關 tool
done
gortexa export --format nope          # 未知格式：非零退出、乾淨失敗
```

三種輸出都有 golden test 鎖定，proto 一改、schema 跟著變，漂移會被抓到。

## 11 nats-integration — 對真實 NATS broker

從情境自帶的 `docker-compose.yaml` 起一個真 NATS broker，跑 mq 的 core NATS 整合測試。`NATS_URL` 一旦設了，測試連的是容器裡的 broker 而非行程內嵌 server，連線失敗就是失敗——skip 也視為失敗。

```bash
docker compose -f docker-compose.yaml up -d nats
NATS_URL=nats://127.0.0.1:4222 go test -tags integration -race -count=1 \
  -run 'TestNATS' ./mq/
```

斷言 `TestNATSPubSub`、`TestNATSQueueGroupLoadBalance` 等 PASS——後者驗證非空 `group_id` 的 load-balance 語意（見[設定](https://gortexa.sheng.page/configuration/#mq-語意)）。

## 12 jetstream-integration — 對真實 JetStream broker

同 11 的結構，改用 JetStream driver：broker 以 `-js` 啟動、`JETSTREAM_URL` 環境變數。除了 fanout 與 load-balance 語意與 core NATS 對齊之外，多驗證 JetStream 專屬的 at-least-once——handler 回錯誤後訊息會被延遲重投遞。

```bash
docker compose -f docker-compose.yaml up -d nats   # nats:2 加 command: ["-js"]
JETSTREAM_URL=nats://127.0.0.1:4222 go test -tags integration -race -count=1 \
  -run 'TestJetStream' ./mq/
```

斷言 `TestJetStreamPubSub`、`TestJetStreamQueueGroupLoadBalance`、`TestJetStreamRedeliveryOnHandlerError` 等 PASS——最後者釘住 at-least-once 重投遞（handler 因此必須冪等，見[設定](https://gortexa.sheng.page/configuration/#mq-語意)）。
