【发布时间】:2019-01-23 00:35:28
【问题描述】:
有几种基于推送的消息传递标准(例如 MQTT、STORM)。是否有任何基于拉取的消息传递协议?
用例:
A 公司目前提供支持多个主题的 MQTT 端点。当事件发布到主题时,MQTT 服务器将事件推送给所有订阅者。
但是,A公司希望解决一些缺点:
- 当新订阅者注册以接收发布到某个主题的事件时,她希望接收曾经发布到该主题的所有消息。
- 只要有一个“热门”主题,即在短时间内向该主题发布大量事件,将这些事件分派给已注册的订阅者可能会使订阅者不堪重负。因此,订阅者希望按照自己的节奏从主题中提取事件。
当前解决方案:
公司 A 公开了一个 HTTP 端点,该端点具有检索事件的 get-event 操作(例如,编号为 1034567 到 1034578 在下面的 curl 调用中发布到名为 some-hot-topic 的主题):
curl http://pull.company-a.com/get-events?topic=some-hot-topic&start-at=1034567&stop-at=1034578
问题:
A 公司需要定义 URL 的格式和响应负载的格式,而不是构建这个单独的解决方案,A 公司可以使用任何已经定义这些的标准来解决问题(该标准确实不必基于 HTTP)。
我想到了一些事情(例如,Kafka Consumer REST API、RSS),它们在不同的上下文中解决了类似的问题,但似乎没有任何定义旨在为基于拉的事件提供标准的目的通知协议。
【问题讨论】:
标签: messaging kafka-consumer-api architectural-patterns