Apache kafka 发布/订阅和消费者感知发布。无人订阅时停止生产
我试图找到一个支持以下用例的消息传递系统Apache kafka 发布/订阅和消费者感知发布。无人订阅时停止生产,apache-kafka,architecture,publish-subscribe,Apache Kafka,Architecture,Publish Subscribe,我试图找到一个支持以下用例的消息传递系统 生产者注册主题名称空间 客户端订阅主题 第一个客户端触发生产者开始生产的通知 订阅同一主题的新客户端接收数据(可能合并,类似于RX世界中的热/冷观测) 当最后一个客户离开、取消订阅或崩溃时,通知制作人停止制作该主题 我知道,根据《经济学》的定义,生产者被定义为幸福地不知道消费者的存在,这意味着我的用例根本不符合pub/sub范式 到目前为止,我已经研究过卡夫卡、Redis、NATS.io和Amazon SQS,但没有太大成功。我一直在想一些可能的方法来解
- 引文来自外部来源
- 当第一个最终用户查看股票A时,从外部系统订阅股票A报价
- 当不再有终端用户查看股票时,停止从外部系统接收股票报价
Yannick不幸的是,您没有指定您试图用这些需求解决的业务用例。从它的声音来看,你想要的不是发布/订阅系统,而是一个编排系统 我建议查看能够支持您列出的需求和更多编排用例的 下面是一个符合您需求的strawman设计:
- 任何新订阅者都会向工作流发送一个事件,其中TopicName作为要订阅的workflowID。如果给定ID的工作流不存在,它将自动启动
- 任何订阅都会发送另一个取消订阅的信号
- 没有订阅服务器时,工作流将退出
- Publisher向工作流发送事件以传递给订阅服务器
- 工作流使用活动将事件传递给订阅服务器
- 如果具有给定TopicName的工作流未运行发布事件,它将失败
- 构建了无限过期时间间隔的指数重试
- 故障处理。例如,它允许执行一个任务,当两个更新在配置的时间间隔内都无法成功时,通知另一个服务
- 支持长时间运行的心跳操作
- 能够实现复杂的任务依赖关系。例如,在发生无法恢复的故障时实现调用链接或补偿逻辑()
- 提供对更新当前状态的完全可见性。例如,在使用队列时,如果队列中有一些消息,您就知道所有这些消息,并且您需要额外的数据库来跟踪总体进度。每一个事件都有节奏地记录下来
- 能够取消飞行中的更新
- 分布式CRON支持
请参阅Cadence编程模型。RabbitMQ具有可用于的内部事件。事件(如
consumer.created
或consumer.deleted
)可用于触发服务器级别的某些操作:例如,使用RabbitMQ检查剩余的使用者数量,并根据您的用例采取关闭主题等操作。Yeah,理想情况下,这将是一个开箱即用的解决方案,我不必自己进行订阅管理/重新计算。但是谢谢,我会看看Zookeeper API,看看能在上面构建什么。从来没有想过使用它不仅仅是为了满足卡夫卡的一个需求:)谢谢你的链接,我有空的时候会看一看。另外,在原始问题中添加一个用例,我将使用Cadence进行订阅管理,但是pas报价直接通过内存流或外部系统(如Kafka)进行传输。是的,这就是e