RX 与像rabbitmq 或zeromq 这样的消息队列? [已关闭]

问题描述 投票:0回答:2

我对这些高级并发范例相当陌生,并且我已经开始使用 scala RX 绑定。所以我想了解 RX 与 RabbitMQ 或 ZeroMQ 等消息队列有何不同?

它们似乎都使用订阅/发布范例。我在某个地方看到一条关于 RX 在 RabbitMQ 上运行的推文。

有人可以解释一下 RX 和消息队列之间的区别吗?为什么我会选择其中之一而不是另一个?一种可以替代另一种,还是相互排斥?它们在哪些方面有重叠?

rabbitmq system.reactive zeromq reactive-programming
2个回答
30
投票

值得点击[system.reactive]标签上的

了解更多
链接,我们在那里放置了相当多的信息!

从介绍中你可以看到 Rx 不是消息队列技术:

Reactive Extensions (Rx) 是一个使用可观察序列和 LINQ 样式查询运算符编写异步和基于事件的程序的库。 System.Reactive 是通过库使用的根命名空间。使用 Rx,开发人员使用 LINQ 运算符表示异步数据流,并使用调度程序参数化异步数据流中的并发性。简单地说,Rx = Observables + LINQ + Schedulers。

因此,Rx 和消息队列确实是不同的技术,可以很好地相互补充。一个典型的例子是股票价格报价服务 - 这可能通过消息队列传递,但随后由 Rx 进行转换以对价格进行分组、聚合和过滤。

您可以更进一步:就像实体框架将

IQueryable<T>
查询转换为直接在数据库上运行的 SQL 一样,您可以创建将 Rx
IQbservable<T>
查询转换为本机查询的提供程序 - 例如
Where
过滤器可能会利用本机过滤许多消息队列技术中存在直接应用过滤器的功能。但这是相当多的工作,而且很困难。

将消息队列消息馈入 Rx

Subject
更容易,而且并不罕见,这样来自队列的传入消息就会转换为 Rx 流,以便在客户端中轻松使用。 Rx 还广泛用于 GUI 中,以处理客户端事件(例如按钮按下和文本框更改),从而使传统上困难的场景(例如通过异步服务器查询进行拖放和文本自动完成)变得更加容易。有一个很好的实践实验室涵盖了后面的场景这里。它是针对 Rx 的早期版本编写的,但仍然非常相关。

我建议您观看 Bart de Smet 的视频演示,了解精彩的介绍:使用反应式扩展 (Rx) 治愈您的事件处理蓝调 - 包括经典的 Rx 演示,该演示通过 Kinect 的实时反馈编写查询以解释手动操作 -挥手!


13
投票

有人可以解释 RX 和其他消息队列之间的区别吗?

Rx 只是事件(任何类型的事件!)的抽象。从分布式队列接收消息一个事件,通常,ZeroMQ / RabbitMQ 解决方案经常必须使用和组合不同的事件,而 Rx 非常擅长。

Rx 通常使编写 ZeroMQ / RabbitMQ 应用程序比其他方式更更容易 :)

© www.soinside.com 2019 - 2024. All rights reserved.