messaging - NATS 的订购保证是否涵盖发布到多个主题?
问题描述
https://nats.io/documentation/faq/#ordering
NATS 实现每个发布者的源订单交付。
在登录服务从用户服务订阅主题的以下情况下,NATS 是否保证消息排序,其中所有消息传递都在单个 NATS 集群上运行(没有 NATS 流):
用例:用户服务(Java 客户端)在主题“query.users”上侦听请求消息。当消息到达时,它将当前用户列表发布到响应主题。在用户服务中,可以创建新用户,从而在“users.updates”主题中发布更新消息。
如果登录服务在启动时首先订阅“users.updates”,然后立即查询“query.users”,它将接收当前用户列表和该列表的更新,因此它可以保存用户列表的最终一致副本。
问题:如果用户服务收到“query.users”查询并发送用户列表作为响应(在查询生成的主题中),然后立即在“users.updates”主题中发送更新消息,
是保证
- 登录服务将首先接收生成主题中的查询响应,然后接收“users.updates”主题中的更新消息,或者
- 登录服务将收到这两条消息,但顺序不确定,
或者是否会发生对“users.updates”的订阅没有足够快地建立并且登录服务从未收到更新消息,但确实收到了查询的用户列表?
或者,同样的问题,更抽象:
一个 NATS 集群,没有 NATS 流...
Java客户端A有一个监听主题X的调度器。当消息到达时,它首先向replyTo主题发布响应,然后立即向Y主题发布消息。
如果 Java 客户端 B 首先订阅 Y,然后立即向主题 X 发送查询,我们希望客户端 B 将同时收到响应和消息。
是否保证,客户 B 将
- 首先接收响应,然后接收Y 上的消息,或者
- 接收两个消息,但顺序不确定,
或者是否会发生对 Y 的订阅没有足够快地建立并且客户端 B 从未收到 Y 上的消息,尽管它收到了对其查询的响应?
解决方案
推荐阅读
- python - 在 DataFrame 中使用 regex 和 pandas 替换值
- azure - 将 Azure 应用服务连接到 SQL 托管实例故障转移组
- c - 未定义结构 workqueue_struct 的使用无效
- python - 向 GUI 提出异常,但在用户输入后继续
- swift - SwiftUI NavigationView 不显示标签关闭
- java - 条纹 - android java
- json - Flutte - 提取到 FutureBuilder 的 JSON 反序列化数据返回空值
- c# - 为什么我的 android 布局/视图从那里实际移动?
- javascript - 使用 Javascript 访问浏览器缓存
- python - 在长系列中搜索非 NaN 条目