服務導出(Service Export):用於請求-回覆模式。一個賬户將服務(即一個主題,用於接收請求並回復)導出,其他賬户可以導入該服務並向其發送請求。
流導出(Stream Export):用於流消息(即發佈-訂閲模式)。一個賬户將流(即一個主題,用於發佈消息)導出,其他賬户可以導入該流並接收消息
stream 機制
// 賬户A:導出流(發佈者)
accountA.Exports = []*Export{
{Subject: "prices.*", Type: Stream} // 只發布,不接收響應
}
// 賬户B:導入流(訂閲者)
accountB.Imports = []*Import{
{Account: "A", Subject: "prices.*", To: "external.prices.*"}
}
// 數據流向:A → B(單向)
ncA.Publish("prices.stock", data) // A發佈
// B訂閲 "external.prices.stock" 接收數據
service
// 賬户A:導出服務(服務提供者)
accountA.Exports = []*Export{
{Subject: "users.>", Type: Service} // 接收請求並返回響應
}
// 賬户B:導入服務(服務消費者)
accountB.Imports = []*Import{
{Account: "A", Subject: "users.>", To: "svc.users.>"}
}
// 數據流向:B ⇄ A(雙向)
// B發起請求
resp, err := ncB.Request("svc.users.get", requestData, timeout)
// A處理請求並返回響應
參考資料
https://docs.nats.io/running-a-nats-service/configuration/securing_nats/accounts