java - 是否可以使用非函数式语言构建响应式应用程序?

标签 java functional-programming apache-camel reactive-programming

我想了解 Reactive Application 声明背后的原则是否可以使用非函数式语言来实现。

有人说,由于 FP 使用不可变状态和无副作用函数,因此更容易实现并发、分布式和弹性系统。

但我们如何使用 Java 来实现这一目标呢?

有一些框架,如 Apache Camel,有一些组件可以使用,如 Camel RXCamel SEDA

这些框架够用吗?

我会尝试澄清我的问题:

我认为响应式编程是一种新的编程范式,而一种新的编程范式需要新的工具和框架。

函数式语言以不同方式处理对象,这就是为什么有很多关于 FRP 基于事件和异步处理事物的文章。

但是现在,回到 Java 或其他面向对象的语言,让我们在 Web 应用程序中思考:

  1. 我们如何创建一个 java web 应用程序来利用好的 基于事件的前端。
  2. 然后,这些事件以平滑的方式将信息异步传递到后端。
  3. 后端可以轻松扩展并具有弹性。

我知道可以使用 java、servlet 和 EJB 创建满足这些要求的应用程序,但我的问题是,我们可以采用不同的方式吗? 更接近响应式(Reactive)方法?

我是这样想的:

  • 一个漂亮的前端ajax框架,使与后端的“传递信息”顺畅。
  • 在后端使用框架或库(Camel SEDA 或 Camel RX)并行执行的方法。

你认为这是一个好方法吗?

最佳答案

好吧,如果你看一下 Reactive manifesto你引用,你会看到“功能”这个词根本没有出现。相反,有 4 个特定标准用于定义什么是“响应式(Reactive)”应用程序:

  • Event-driven
  • Scalable
  • Resilient
  • Responsive

Java 中的任何内容都不能禁止您实现这些特征中的任何一个(除了对非常罕见、性能极高的场景的“响应式”)。 Java 中没有任何内容禁止您编写受限于不可变对象(immutable对象)和无副作用函数的代码(事实上,一些库,如 Guava,鼓励您使用不可变对象(immutable对象)和具体化函数).

像 RxJava 这样的框架可以通过提供一个面向数据流的事件驱动系统,进一步帮助您编写满足声明中定义的标准的应用程序,这基本上是 core tenet of reactive programming .

关于java - 是否可以使用非函数式语言构建响应式应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20751115/

相关文章:

java - 如果我从多个线程使用 JSch,我应该如何使用它

java - 尝试远程访问HBase时出错

java - jsoup 从 html 文件中获取特定的 id

java - 使用 Pidgin 测试 XMPP Camel 路由

java - 将我的文件放在 netbeans 项目中的何处

php - 函数数组的替代方案?

构造函数中带有参数的 Java 8 供应商

Scala 设置匹配案例

java - 将 spring 从 3.1.1 升级到 4.3.3 后出现 Spring UnsatisfiedDependencyException

java - 使用 Apache Camel 和 ActiveMQ 时如何处理系统崩溃