我对这些高级并发范式还比较新,我开始使用scala RX绑定。所以我试图了解RX与RabbitMQ或ZeroMQ等消息队列的区别。
它们都似乎使用订阅/发布范例。在某个地方,我看到了一条关于RX在RabbitMQ之上运行的推文。
有人能解释一下RX和消息队列之间的区别吗?为什么我要选择一个而不是另一个?一个可以替代另一个,还是它们是互斥的?在哪些领域它们重叠?
我对这些高级并发范式还比较新,我开始使用scala RX绑定。所以我试图了解RX与RabbitMQ或ZeroMQ等消息队列的区别。
它们都似乎使用订阅/发布范例。在某个地方,我看到了一条关于RX在RabbitMQ之上运行的推文。
有人能解释一下RX和消息队列之间的区别吗?为什么我要选择一个而不是另一个?一个可以替代另一个,还是它们是互斥的?在哪些领域它们重叠?
[system.reactive]
标签的信息,我们在那里提供了相当多的信息!所以,Rx 和消息队列确实是不同的技术,它们可以很好地互补。经典例子是股票价格标语服务 - 它可能通过消息队列传递,但然后通过 Rx 进行转换以分组、聚合和过滤价格。Reactive Extensions (Rx) 是一个使用可观测序列和类似于 LINQ 的查询操作符来组合异步和基于事件的程序的库。 System.Reactive 是整个库中使用的根命名空间。使用 Rx,开发人员使用 LINQ 运算符表示异步数据流,并使用调度器对异步数据流中的并发进行参数化。简而言之,Rx = Observables + LINQ + Schedulers。
IQueryable<T>
查询转换为直接在数据库上运行的 SQL 一样,你可以创建提供程序将 Rx IQbservable<T>
查询转换为本机查询 - 例如,一个 Where
过滤器可能利用现有于许多消息队列技术中的本机过滤能力来直接应用过滤器。不过,这是相当费力和困难的。Subject
,以便将来自队列的传入消息转换为易于在客户端使用的 Rx 流。Rx 在 GUI 中也广泛用于处理客户端事件,例如按钮按下和文本框变化,从而使传统上困难的场景,如异步服务器查询通过拖放和文本自动完成等功能得到极大地简化。有一个很好的实践实验室,涵盖了后一种情况 这里。它是针对 Rx 的早期版本编写的,但仍然非常相关。