NATS.IO指定订阅规则报错、通配符>可正常运行问题咨询
NATS.IO Request Reply 订阅配置异常排查结果
根因说明
- NATS 的 Request Reply 模式工作逻辑为:请求发起方会自动生成一个
_INBOX.前缀的临时专属主题用于接收响应,该主题不在你配置的nats.service.aquila.>、nats.service.aquila.vehicle.>订阅规则匹配范围内,因此vizzio、test用户默认无法接收响应回执。 - 你仅为服务提供方aquila用户配置了
allow_responses: true参数,该参数的作用是允许用户自动获得自身发起请求对应临时收件箱的订阅权限,请求发起方vizzio、test用户未配置该参数,因此无法订阅临时响应主题。 - 当你将订阅规则改为通配符
>时,匹配范围覆盖了_INBOX.开头的临时主题,因此功能恢复正常。
解决方案
你不需要开放全量订阅权限,选择以下任意一种方案修改配置即可:
方案1:为请求发起方添加allow_responses配置(更安全,推荐)
给vizzio、test用户的permissions配置块中添加allow_responses: true参数,修改后配置示例如下:
authorization: { users: [ { user: aquila, password: $2a$12$9TasTI2C08RXkDs/EsZSIOaPDn.oKBcoNpsz71zY1bVXGSIhfjrQS, permissions: { publish: { deny: ">" }, subscribe: "nats.service.aquila.>", allow_responses: true}}, { user: vizzio, password: $2a$12$2vFQ3Buqy8i4DNhRoTjJ7ui3njVwDPSnZK2Oi/zLfjMxibOQIuKcS, permissions: { publish: "nats.service.aquila.>", subscribe: "nats.service.aquila.>", allow_responses: true}}, { user: test, password: $2a$12$tjLLKZgO9JR.tyk.BhperOt8F82xrDJ9fjcOnJEO/5QHXX7OlSz2e, permissions: { publish: "nats.service.aquila.vehicle.>", subscribe: "nats.service.aquila.vehicle.>", allow_responses: true}} ] }
该方案的优势是NATS会自动为用户开放自己发起的请求对应的临时收件箱订阅权限,不需要额外配置其他主题,权限控制更精准。
方案2:手动添加临时收件箱订阅权限
在vizzio、test用户的subscribe规则中添加_INBOX.>匹配规则,修改后订阅配置示例:
# vizzio用户订阅规则 subscribe: ["nats.service.aquila.>", "_INBOX.>"] # test用户订阅规则 subscribe: ["nats.service.aquila.vehicle.>", "_INBOX.>"]
内容的提问来源于stack exchange,提问作者Reza
相关产品推荐
相关产品推荐

