NATS 的 TopicSubject通配符有两种没有.*这种写法。通配符只能单独作为完整的一个 token 使用不能跟字面量拼接。两种通配符表格通配符含义示例*匹配恰好一个tokenorders.*.us匹配orders.created.us但不匹配orders.created.eu或orders.created.us.east匹配一个或多个token只能放在末尾orders.匹配orders.created、orders.created.us、orders.created.us.east常见误区你提到的.*可能是想表达匹配任意一个 token但正确的写法就是*不需要前面的点。因为 NATS 的 subject 是用.分隔的层级结构*本身就代表一个完整的 token 位置。错误理解plainfoo.*.bar # 这是对的foo 和 bar 之间必须有一个 token foo.* # 这是对的foo 后面必须有一个 token foo.*bar # 这是错的* 不能和字面量拼接实用模式示例表格订阅模式匹配范围示例service.*某个服务的所有事件orders.*→orders.created,orders.updated*.action所有服务的某个动作*.created→orders.created,users.created*.*.region特定区域的所有事件*.*.us→orders.created.us,users.updated.usservice.某服务及其子主题的所有事件orders.→orders.created,orders.created.us.east*.created.*所有创建事件及其子类型orders.created.us,users.created.eu关键限制只能出现在 subject 末尾foo..bar是非法的*可以出现在任意位置但每个*只能匹配一个token通配符不能跟字面量拼接foo.*bar不会按你想象的方式工作发布消息时不能使用通配符只能在订阅端使用如果你是想实现类似正则.*的任意字符效果在 NATS 中应该用匹配剩余所有层级或合理组合*的数量。具体场景可以告诉我我帮你设计合适的 subject 模式。
NATS 的 Topic(Subject)通配符
NATS 的 TopicSubject通配符有两种没有.*这种写法。通配符只能单独作为完整的一个 token 使用不能跟字面量拼接。两种通配符表格通配符含义示例*匹配恰好一个tokenorders.*.us匹配orders.created.us但不匹配orders.created.eu或orders.created.us.east匹配一个或多个token只能放在末尾orders.匹配orders.created、orders.created.us、orders.created.us.east常见误区你提到的.*可能是想表达匹配任意一个 token但正确的写法就是*不需要前面的点。因为 NATS 的 subject 是用.分隔的层级结构*本身就代表一个完整的 token 位置。错误理解plainfoo.*.bar # 这是对的foo 和 bar 之间必须有一个 token foo.* # 这是对的foo 后面必须有一个 token foo.*bar # 这是错的* 不能和字面量拼接实用模式示例表格订阅模式匹配范围示例service.*某个服务的所有事件orders.*→orders.created,orders.updated*.action所有服务的某个动作*.created→orders.created,users.created*.*.region特定区域的所有事件*.*.us→orders.created.us,users.updated.usservice.某服务及其子主题的所有事件orders.→orders.created,orders.created.us.east*.created.*所有创建事件及其子类型orders.created.us,users.created.eu关键限制只能出现在 subject 末尾foo..bar是非法的*可以出现在任意位置但每个*只能匹配一个token通配符不能跟字面量拼接foo.*bar不会按你想象的方式工作发布消息时不能使用通配符只能在订阅端使用如果你是想实现类似正则.*的任意字符效果在 NATS 中应该用匹配剩余所有层级或合理组合*的数量。具体场景可以告诉我我帮你设计合适的 subject 模式。