我正在学习API中的Reactive Streams,我对它与JMS之间的相似性感到震惊。在JMS中,我们也有异步处理,发布者和订阅者。在使这种等价化方面我缺少什么观点?
答案 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不支持这一点。主题发布者或队列发送者永远不会被告知下游障碍,因此无法做出适当的反应。