JMS与Reactive Streams有何不同?

时间:2017-03-09 22:19:39

标签: jms reactive-programming

我正在学习API中的Reactive Streams,我对它与JMS之间的相似性感到震惊。在JMS中,我们也有异步处理,发布者和订阅者。在使这种等价化方面我缺少什么观点?

2 个答案:

答案 0 :(得分:3)

Reactive Streams是面向压力的,JMS是面向消息的。虽然你可以使用JMS做背压。

阻止API(非反应性)

java.util.concurrent.Future::get< - > javax.jms.MessageConsumer.receive

非阻止API

org.reactivestreams.Publisher::subscribe< - > javax.jms.MessageConsumer::setMessageListener org.reactivestreams.Subscriber::onNext< - > javax.jms.MessageListener::onMessage

背压API< - >消息API

org.reactivestreams.Subscription::request< - > javax.jms.MessageProducer::send

初始化/完成/错误处理

org.reactivestreams.Subscriber::onSubscribe< - > javax.jms.MessageListener::onMessage org.reactivestreams.Subscriber::onError< - > javax.jms.MessageListener::onMessage org.reactivestreams.Subscriber::onComplete< - > javax.jms.MessageListener::onMessage org.reactivestreams.Subscription::cancel< - > javax.jms.MessageProducer::send

答案 1 :(得分:2)

为了使流具有反应性,它应该能够应用背压。 (见this initiative。)

JMS不支持这一点。主题发布者或队列发送者永远不会被告知下游障碍,因此无法做出适当的反应。