问题标签 [project-reactor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Akka or Reactor
I am in the process of starting a new project (java-based). I need to build it as a modular, distributed and resilient architecture.
Therefore I would like to have the business processes to communicate among themselves, be interoperable, but also independent.
I am looking right now at two frameworks that, besides their difference in age, express 2 different views:
- Akka (http://akka.io)
- Reactor (https://github.com/reactor/reactor)
What I should consider when choosing one of the above frameworks?
As far as I understand till now, Akka is still somehow coupled (in a way that I have to 'choose' the actor I want to send the messages to), but very resilient. While Reactor is loose (as is based on event posting).
Can someone help me understand how make a proper decision?
UPDATE
After reviewing better the Event Bus of Akka, I believe in some way the features expressed by Reactor are already included in Akka.
For example the subscription and event publishing, documented on https://github.com/reactor/reactor#events-selectors-and-consumers, can be expressed in Akka as following:
Therefore it seems to me now that the major differences between the two are:
- Akka, more mature, bound to Typesafe
- Reactor, early stage, bound to Spring
Is my interpretation correct? But what is conceptually the difference between the Actor in Akka and the Consumer in Reactor?
reactor - Reactor 会提供远程处理吗?
我正在尝试找出我们应该在下一个项目中使用 Akka 还是 Reactor。最重要的问题之一是未来选择的框架是否会提供远程处理。正如我所看到的,Akka 以我们想要的方式提供了这个。
在 GitHub wiki 中,不幸的是 TCP-server/client 部分是空白的,我还找不到关于它的其他信息。
反应堆会提供远程处理吗?
multithreading - 在 Spring 中使用什么样的“EventBus”?内置、Reactor、Akka?
我们将在几周后开始一个新的 Spring 4 应用程序。我们想使用一些事件驱动的架构。今年我到处阅读有关“Reactor”的信息,在网上寻找它时,我偶然发现了“Akka”。
所以现在我们有3个选择:
- 春天的
ApplicationEvent
:http ://docs.spring.io/spring/docs/4.0.0.RELEASE/javadoc-api/org/springframework/context/ApplicationEvent.html Reactor
:https ://github.com/reactor/reactor#reactorAkka
:http ://akka.io/
我找不到真正的比较。
现在我们只需要类似的东西:
X
注册监听Event E
Y
注册监听Event E
Z
发送一个Event E
然后X
andY
将接收并处理该事件。
我们很可能会以异步方式使用它,但肯定会有一些同步场景。我们很可能总是发送一个类作为事件。(Reactor 示例主要使用字符串和字符串模式,但它也支持对象)。
据我了解,ApplicationEvent
默认情况下同步Reactor
工作并以异步方式工作。并且Reactor
还允许使用该await()
方法使其有点同步。Akka
提供或多或少的相同Reactor
,但也支持Remoting。
关于 Reactor 的await()
方法:它可以等待多个线程完成吗?或者甚至可能是这些线程的一部分?如果我们从上面举个例子:
X
注册监听Event E
Y
注册监听Event E
Z
发送一个Event E
X
是否可以通过说:等待并 Y
完成来使其同步。是否有可能让它只等待X
,而不是等待Y
?
也许还有一些替代品?例如 JMS 呢?
很多问题,但希望你能提供一些答案!
谢谢!
编辑:示例用例
当特定事件被触发时,我想创建 10000 封电子邮件。每封电子邮件都必须使用用户特定的内容生成。所以我会创建很多线程(max = system cpu cores)来创建邮件并且不会阻塞调用者线程,因为这可能需要几分钟。
当特定事件被触发时,我想从未知数量的服务中收集信息。每次获取大约需要 100 毫秒。在这里我可以想象使用 Reactor 的
await
,因为我需要这些信息来继续我在主线程中的工作。当特定事件被触发时,我想根据应用程序配置执行一些操作。因此应用程序必须能够动态(取消)注册消费者/事件处理程序。他们会用事件做他们自己的事情,我不在乎。所以我会为每个处理程序创建一个线程,然后继续在主线程中完成我的工作。
简单的解耦:我基本上知道所有的接收器,但我只是不想在我的代码中调用每个接收器。这应该主要是同步完成的。
听起来我需要一个 ThreadPool 或一个 RingBuffer。这些框架是否有动态的 RingBuffers,如果需要,它的大小会增加?
events - 如何使用 Reactor 向多个消费者分派事件并根据事件数据过滤事件?
我正在评估 Reactor ( https://github.com/reactor/reactor ) 是否适合在我的 Spring / 企业应用程序中创建事件调度框架。
首先,考虑一个场景,其中您有一个接口A
和具体的事件类B
,C
等等。我想将具体事件分派给多个消费者,即观察者。这些Reactor
在 bean 后处理期间注册到全局实例。但是,您可以动态注册它们。在大多数情况下,只有一个生产者以高速率向多个消费者发送事件。
我使用Selector
了 s,即,ClassSelector
将正确的事件类型分派给正确的消费者。这似乎工作得很好。
要通知,请使用事件的类型作为键
但是,我想知道这是否是有效调度事件的建议方法?
其次,我想知道是否可以根据事件数据过滤事件?如果我理解正确,Selector
s 仅用于检查密钥。我在这里指的不是事件标头,而是特定于域的对象属性。我想知道使用Streams
and Stream.filter(Predicate<T> p)
,但是是否也可以使用Reactor
and Selector
s 进行过滤?当然,我可以编写一个委托消费者来检查数据并在需要时将其委托给注册消费者。
java - Reactor 对象是线程安全的吗?
反应堆事件是线程安全的吗?我的意思是:我可以从任何线程访问它,例如进行批量通知操作或注册一些事件处理程序吗?还是我必须以某种方式锁定它?
java - 在 Reactor 2.0 中处理流过滤器的正确方法是什么?
我正在使用 Reactor 2.0.0.M1,我正在尝试过滤一个Stream
. 根据我的布尔运算的结果,我想继续使用一个或另一个流。该otherwise()
功能似乎可以做到这一点,但不清楚如何使用它。
我的流看起来像这样:
为了处理正确的情况o.isValid()
,我的理解是我可以打电话.map()
继续顺流而下。
为了处理错误的情况o.isValid()
,我可以访问备用.otherwise()
流。
但似乎没有一种or()
或类似的方法,因此似乎不可能以完全流畅的方式配置两个流。
我能想到的最好的是这样的:
这真的是最好的方法吗?
spring - 弹簧反应器和引导依赖
启动是运行弹簧反应器的先决条件吗?我正在尝试在常规 Web 应用程序环境中使用 spring reactor。我可以看到反应器配置已创建。消费者已注册。通知被调用。事件不会被触发。什么以及如何检查?
配置
注册消费者:
spring - 使用 Spring Boot 和 Spring Security 对后台任务进行身份验证
我有一个后台任务(使用 Project Reactor 运行,但我认为它不相关),我需要与经过身份验证的用户一起运行以通过一些 @PreAuthorize 注释方法。
我正在做这样的事情:
但是当我追踪到 authenticationManager 调用时,我发现它使用的是 Spring-Boot 的默认 InMemoryUserDetailsService,而不是我的自定义身份验证配置。无论我是在 Web 请求线程还是在后台线程中运行身份验证,都会发生这种情况。
我不知道它是否相关,但我在集成测试中运行此代码,并带有以下注释(以及其他注释):
除了这个问题,我的测试向我的服务器发出了一个经过身份验证的 Web 请求,并且验证得很好。所以我至少知道我系统的 Web 部分正在使用正确的身份验证配置。
这是我的身份验证配置: