问题标签 [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.

0 投票
3 回答
36896 浏览

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:

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?

0 投票
1 回答
1142 浏览

reactor - Reactor 会提供远程处理吗?

我正在尝试找出我们应该在下一个项目中使用 Akka 还是 Reactor。最重要的问题之一是未来选择的框架是否会提供远程处理。正如我所看到的,Akka 以我们想要的方式提供了这个。

在 GitHub wiki 中,不幸的是 TCP-server/client 部分是空白的,我还找不到关于它的其他信息。

反应堆会提供远程处理吗?

0 投票
3 回答
28592 浏览

multithreading - 在 Spring 中使用什么样的“EventBus”?内置、Reactor、Akka?

我们将在几周后开始一个新的 Spring 4 应用程序。我们想使用一些事件驱动的架构。今年我到处阅读有关“Reactor”的信息,在网上寻找它时,我偶然发现了“Akka”。

所以现在我们有3个选择:

我找不到真正的比较。


现在我们只需要类似的东西:

  • X注册监听Event E
  • Y注册监听Event E
  • Z发送一个Event E

然后XandY将接收并处理该事件。

我们很可能会以异步方式使用它,但肯定会有一些同步场景。我们很可能总是发送一个类作为事件。(Reactor 示例主要使用字符串和字符串模式,但它也支持对象)。


据我了解,ApplicationEvent默认情况下同步Reactor工作并以异步方式工作。并且Reactor还允许使用该await()方法使其有点同步。Akka提供或多或少的相同Reactor,但也支持Remoting。

关于 Reactor 的await()方法:它可以等待多个线程完成吗?或者甚至可能是这些线程的一部分?如果我们从上面举个例子:

  • X注册监听Event E
  • Y注册监听Event E
  • Z发送一个Event E

X 是否可以通过说:等待并 Y完成来使其同步。是否有可能让它只等待X,而不是等待Y


也许还有一些替代品?例如 JMS 呢?

很多问题,但希望你能提供一些答案!

谢谢!


编辑:示例用例

  1. 当特定事件被触发时,我想创建 10000 封电子邮件。每封电子邮件都必须使用用户特定的内容生成。所以我会创建很多线程(max = system cpu cores)来创建邮件并且不会阻塞调用者线程,因为这可能需要几分钟。

  2. 当特定事件被触发时,我想从未知数量的服务中收集信息。每次获取大约需要 100 毫秒。在这里我可以想象使用 Reactor 的await,因为我需要这些信息来继续我在主线程中的工作。

  3. 当特定事件被触发时,我想根据应用程序配置执行一些操作。因此应用程序必须能够动态(取消)注册消费者/事件处理程序。他们会用事件做他们自己的事情,我不在乎。所以我会为每个处理程序创建一个线程,然后继续在主线程中完成我的工作。

  4. 简单的解耦:我基本上知道所有的接收器,但我只是不想在我的代码中调用每个接收器。这应该主要是同步完成的。

听起来我需要一个 ThreadPool 或一个 RingBuffer。这些框架是否有动态的 RingBuffers,如果需要,它的大小会增加?

0 投票
1 回答
1092 浏览

java - 如何在 Reactor 中使用 PersistentQueue?

我正在尝试将Reactor配置为使用基于Chronicle的持久性,但我无法在文档中找到有关此内容的信息。我看到两种方法:

  1. 创建我自己的调度员支持PersistentQueue
  2. 与此类队列一起使用EventBatcher来包装我的Reactor实例

哪个选项更好?或者也许还有另一个我忽略的解决方案?

0 投票
1 回答
1977 浏览

events - 如何使用 Reactor 向多个消费者分派事件并根据事件数据过滤事件?

我正在评估 Reactor ( https://github.com/reactor/reactor ) 是否适合在我的 Spring / 企业应用程序中创建事件调度框架。

首先,考虑一个场景,其中您有一个接口A和具体的事件类BC等等。我想将具体事件分派给多个消费者,即观察者。这些Reactor在 bean 后处理期间注册到全局实例。但是,您可以动态注册它们。在大多数情况下,只有一个生产者以高速率向多个消费者发送事件。

我使用Selector了 s,即,ClassSelector将正确的事件类型分派给正确的消费者。这似乎工作得很好。

要通知,请使用事件的类型作为键

但是,我想知道这是否是有效调度事件的建议方法?

其次,我想知道是否可以根据事件数据过滤事件?如果我理解正确,Selectors 仅用于检查密钥。我在这里指的不是事件标头,而是特定于域的对象属性。我想知道使用Streamsand Stream.filter(Predicate<T> p),但是是否也可以使用Reactorand Selectors 进行过滤?当然,我可以编写一个委托消费者来检查数据并在需要时将其委托给注册消费者。

0 投票
1 回答
272 浏览

java - 反应堆,无法加载类“org.slf4j.impl.StaticLoggerBinder”

我已经开始玩 Reactor,但我的第一个活动遇到了麻烦:D

按照github中的例子,我尝试写一个“hello world”但没有成功......

问题是什么?

代码:

输出:

0 投票
1 回答
384 浏览

java - Reactor 对象是线程安全的吗?

反应堆事件是线程安全的吗?我的意思是:我可以从任何线程访问它,例如进行批量通知操作或注册一些事件处理程序吗?还是我必须以某种方式锁定它?

0 投票
2 回答
1072 浏览

java - 在 Reactor 2.0 中处理流过滤器的正确方法是什么?

我正在使用 Reactor 2.0.0.M1,我正在尝试过滤一个Stream. 根据我的布尔运算的结果,我想继续使用一个或另一个流。该otherwise()功能似乎可以做到这一点,但不清楚如何使用它。

我的流看起来像这样:

为了处理正确的情况o.isValid(),我的理解是我可以打电话.map()继续顺流而下。

为了处理错误的情况o.isValid(),我可以访问备用.otherwise()流。

但似乎没有一种or()或类似的方法,因此似乎不可能以完全流畅的方式配置两个流。

我能想到的最好的是这样的:

这真的是最好的方法吗?

0 投票
2 回答
396 浏览

spring - 弹簧反应器和引导依赖

启动是运行弹簧反应器的先决条件吗?我正在尝试在常规 Web 应用程序环境中使用 spring reactor。我可以看到反应器配置已创建。消费者已注册。通知被调用。事件不会被触发。什么以及如何检查?

配置

注册消费者:

0 投票
1 回答
951 浏览

spring - 使用 Spring Boot 和 Spring Security 对后台任务进行身份验证

我有一个后台任务(使用 Project Reactor 运行,但我认为它不相关),我需要与经过身份验证的用户一起运行以通过一些 @PreAuthorize 注释方法。

我正在做这样的事情:

但是当我追踪到 authenticationManager 调用时,我发现它使用的是 Spring-Boot 的默认 InMemoryUserDetailsS​​ervice,而不是我的自定义身份验证配置。无论我是在 Web 请求线程还是在后台线程中运行身份验证,都会发生这种情况。

我不知道它是否相关,但我在集成测试中运行此代码,并带有以下注释(以及其他注释):

除了这个问题,我的测试向我的服务器发出了一个经过身份验证的 Web 请求,并且验证得很好。所以我至少知道我系统的 Web 部分正在使用正确的身份验证配置。

这是我的身份验证配置: