RX与像rabbitmq或zeromq这样的消息队列



我对这些高级并发范例还很陌生,我已经开始使用scala RX绑定。因此,我试图了解RX与RabbitMQ或ZeroMQ等消息队列有何不同?

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

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

值得点击[system.reactive]标签上的了解更多链接,我们在那里放了一些信息!

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

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

因此,Rx和消息队列是非常不同的技术,可以很好地互补。一个经典的例子是股票价格行情服务——它可能通过消息队列传递,但随后由Rx转换为分组、聚合和过滤价格。

您可以更进一步:就像实体框架将IQueryable<T>查询转换为直接在数据库上运行的SQL一样,您也可以创建将Rx-IQbservable<T>查询转换为本机查询的提供程序-例如,Where过滤器可能会利用许多消息队列技术中存在的本机过滤功能来直接应用过滤器。这是一项相当艰巨的工作。

将消息队列消息馈送到RxSubject中,以便将来自队列的传入消息转换为Rx流,以便于在客户端中使用,这要容易得多,而且并不罕见。Rx在GUI中也被广泛用于处理客户端事件,如按钮按下和文本框更改,使传统的困难场景(如拖动和通过异步服务器查询自动完成文本)变得更加容易。这里有一个很好的实验室来覆盖后面的场景。它是针对Rx的早期版本编写的,但仍然非常相关。

我建议看一下Bart de Smet的这段视频演示,了解一个精彩的介绍:用反应式扩展(Rx)治愈你的事件处理蓝调——包括经典的Rx演示,它在Kinect的实时反馈上写一个查询来解释挥手!

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

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

通常,Rx使编写ZeroMQ/RabbitMQ应用程序比其他情况下更容易:)

最新更新