1

这里的用例是这样的:

  • 我有一个数据/价值发布者
  • 我有多个值消费者(或订阅者),当他们开始时需要读取/获取值,然后订阅后续更新

目标是让发布者和订阅者都只做“一件事”。

示例:发布者发布outside.temperature=28并且多个订阅者会对新信息做出反应,例如打开加热器,发送一条短信说“带上长裤”,并在某些显示器上更新一些图形。

我今天(正在工作)的是带有队列的 Apache ActiveMQ,任何订阅者都可以query outside.temperature并且让发布者(重新)发送它的最新值。回复被发送给发送查询的消费者(回复队列)。新值将发布到具有相同名称 ( outside.temperature) 的主题。每次订阅者(重新)启动时,都会发生这种情况:查询当前状态,订阅更新。

这一切似乎都过于复杂,因为订阅者必须知道如何做两件事:

  • 知道如何请求一个值(队列和回复队列),即轮询
  • 知道如何订阅未来值(主题),即订阅推送

出版商必须知道如何做两件事:

  • 知道如何回复查询(队列),回答投票请求
  • 知道如何发布新值(主题),推送新值

这里的目标是拥有一些中间件软件,它们将:

  • 保留(并保留)键的最后一个已知值
  • 向该密钥的所有订阅者发布更改,即 pubsub
  • 将最新的已知值(作为推送)发送给新订阅者

这将降低发布者和订阅者的复杂性。

我一直在寻找 Redis 来解决这个问题,但 PUBSUB 功能只替换了上面示例中的主题,而不是在订阅者启动(和应答)时轮询当前值,即查询/队列部分。

我一直在寻找 ZooKeeper 和手表,虽然它看起来可以满足我的需求,但它过于复杂并且需要大量代码。

我一直在查看 ØMQ (ZeroMQ) 并看到了Last Value Caching, LVC一词。这里的建议是在发布者和订阅者之间创建一个代理。

RabbitMQ 有 LVC 扩展,例如https://github.com/simonmacmullen/rabbitmq-lvc-plugin

我的问题是,是否还有其他一些 FLOSS 产品可以使用内置的最后一个值缓存进行 pub-sub,而不需要添加自定义代理或插件?

4

1 回答 1

0

There's a couple of ways to do this over ZeroMQ; read this http://zguide.zeromq.org/page:all#Last-Value-Caching for a simple pattern and then http://zguide.zeromq.org/page:all#Reliable-Publish-Subscribe-Clone-Pattern is a more complex approach.

Note that both approaches use a piece in the middle; however you can quite trivially make the first LVC pattern work just in the publisher.

于 2012-12-26T00:02:06.353 回答