Spring Cloud Stream的函数式和响应式Reactive编程特点 - spring.io

解道jdon 2021-04-08 12:19:15
spring 函数 stream Cloud 响应


Spring Cloud Stream(SCSt)的函数式和反应式Reactive编程带来更少的代码、更少的配置。不过,最重要的是,您的代码是完全分离的,并且与SCSt的内部结构无关。

虽然下面描述的所有功能都是SCSt的依赖项Spring Cloud Function(SCF)的functional,但是在理解SCSt上下文中功能的附加含义时,您必须意识到某些细微差别。

供应商,函数和消费者

类型Supplier, Function, or Consumer的任何bean或可以映射到它们的任何Bean都可以被SCST视为一个消息处理程序(Function或 Consumer),或者被视为一个消息源(Supplier),根据使用的函数策略类型,使用<function-name>-<in/out>-<index>命名约定自动生成输入和输出绑定。

看下面案例:

@SpringBootApplication
public class SampleApplication  {
    @Bean
    public Function<String, String> uppercase() {
        return value -> value.toUpperCase();
    }
}

这里的函数被视为一个消息处理程序,该消息处理程序消费来自绑定的uppercase-in-0,结果发送到绑定的uppercase-out-0。其余部分可以像以前一样使用。例如

--spring.cloud.stream.bindings.uppercase-in-0.content-type=text/plain。

单击此处了解更多详细信息和配置选项。

命令式或反应式

函数可以是命令式或反应性。命令式函数在每个单独的事件上触发,而反应式函数仅触发一次,将引用传递给Project Reactor提供的整个事件流抽象(例如Flux和Mono)。

命令式:

@SpringBootApplication
public class SampleApplication  {
    @Bean
    public Function<String, String> uppercase() {
        return value -> value.toUpperCase();
    }
}

反应性:

@SpringBootApplication
public class SampleApplication  {
    @Bean
    public Function<Flux<String>, Flux<String>> uppercase() {
        return flux -> flux.map(value -> value.toUpperCase());
    }
}

除了为您提供不同的(单例)编程样式来处理事件之外,反应式编程还为某些用例增加了附加值,否则实现起来将非常复杂。尽管本文讨论这些用例或响应模式超出了讨论范围,但仍然值得一提的是状态管理用例(例如窗口,聚合和分组)以及拆分流或用例的情况。合并多个流,这将在下一节中讨论。

关于反应式功能的绑定和命名规则,它们与上一节中说明的相同。

注意:虽然前面的示例仅Function作为示例,但相同的规则适用于Supplier和Consumer。用户指南的Spring Cloud Function支持部分以及Reactor文档提供了更多详细信息。

函数性

有时需要对数据流进行分类和组织。例如,考虑一个经典的大数据用例,即处理包含“订单”和“发票”的无组织数据,并且您希望每个都进入一个单独的数据存储中。在这里发挥功能支持(具有多个输入和输出的功能)的支持。

让我们看一个这样的函数的示例(此处提供完整的实现细节):

@Bean
public Function<Flux<Integer>, Tuple2<Flux<String>, Flux<String>>> organise() {
    return flux -> ...;
}

鉴于Project Reactor是SCF的核心依赖项,我们将使用其Tuple库。Tuple向我们传达基数cardinality和类型信息而给我们带来了独特的优势。两者对于SCSt而言都是极其重要的。基数让我们知道需要创建多少个输入和输出绑定并将其绑定到函数的相应输入和输出。知道类型信息可确保正确的类型转换。

同样,这是绑定名称命名约定的“索引”部分起作用的地方,因为在此函数中,两个输出绑定名称为organise-out-0和organise-out-1。

重要提示:目前,仅针对Function<TupleN<Flux<?>...>, TupleN<Flux<?>...>>以复杂事件处理为中心的反应性函数()支持functional统一性,在复杂事件处理中,对事件融合的评估和计算通常需要查看事件流,而不是单个事件。

有关最新信息,请阅读用户指南中的“ 具有多个输入和输出参数的函数”部分

                   

版权声明
本文为[解道jdon]所创,转载请带上原文链接,感谢
https://www.jdon.com/53340

  1. HTML5和CSS3提高
  2. Improvement of HTML5 and CSS3
  3. NMN concept stock up and down limit, Harvard & 34; ageless drug & 34; only market speculation?
  4. 「HTML+CSS」--自定义加载动画【011】
  5. 「HTML+CSS」--自定义加载动画【010】
  6. 「HTML+CSS」--自定义加载动画【009】
  7. 「HTML+CSS」--自定义加载动画【008】
  8. "HTML + CSS" -- custom loading animation [011]
  9. "Custom" animation [CSS + 010]
  10. "HTML + CSS" -- custom loading animation [009]
  11. "HTML + CSS" -- custom loading animation [008]
  12. HttpServletRequest、通过request获得请求头、请求体等、解决中文乱码等问题
  13. HttpServletRequest, obtaining request header and request body through request, solving Chinese garbled code and other problems
  14. html2canvas 识别 svg 解决方案
  15. Solution of identifying SVG with html2canvas
  16. Web前端架构师
  17. Web front end architect
  18. 3000 yuan of financial software is less than 28 yuan of system, and the automatic accounting system is comparable to artifact
  19. Blessing of the sea
  20. IT兄弟连 HTML5教程 CSS3揭秘 小结及习题
  21. Summary and exercises of CSS3 in HTML5 course of it Brothers Company
  22. It's disassembled before it's on the market. The workmanship of Xiaomi 10 is unexpected, reducing maintenance costs?
  23. Vue自学之路5-vue模版语法(v-text,v-html,v-pre)
  24. Vue self learning 5-vue template syntax (v-text, v-html, v-pre)
  25. 【HTML】处理&lt;br&gt;换行符追加到前端换行无效的问题 --- html中渲染的字符串中包含HTML标签无效的处理方法,字符串中包含HTML标签被转义的问题 解决
  26. [HTML] processing & lt; BR & gt; the problem of invalid line feed when the line feed character is added to the front end --- the processing method of invalid HTML tag contained in the rendered string in HTML, and the problem of escape of HTML tag containe
  27. Vue自学之路5-vue模版语法(v-text,v-html,v-pre)
  28. Vue self learning 5-vue template syntax (v-text, v-html, v-pre)
  29. 7个Web前端程序员必须会用CSS技巧
  30. 10个优秀开源JavaScript模板引擎
  31. JavaScript基础知识及写法
  32. FB大规模重构React Native,Airbnb宣布回归原生,前端巨变来临?
  33. Seven web front-end programmers must be able to use CSS skills
  34. 10 excellent open source JavaScript template engines
  35. Basic knowledge and writing method of JavaScript
  36. FB large scale reconstruction react native, airbnb announced return to the original, the front-end changes coming?
  37. 网页HTML5视频播放器(兼容各主流浏览器)
  38. Web HTML5 video player (compatible with mainstream browsers)
  39. 前端开发需要掌握哪些技术?前端开发都学什么?
  40. 一本关于HTTP的恋爱日记
  41. 「HTML+CSS」--自定义加载动画【010】
  42. 前端er必须知道的Git地址及常用工具地址
  43. What technologies should be mastered in front end development? What do you learn from front end development?
  44. [DataGuard] seamless handover of physical DG configuration client (8.4) -- ora-16652 and ora-16603 error
  45. Wireless charging
  46. [DataGuard] seamless handover of physical DG configuration client (8.3) -- client TAF configuration
  47. [DataGuard] seamless handover of physical DG configuration client (8.1) -- configuration of data guard broker
  48. web前端数组处理之扁平化数组
  49. 一本关于HTTP的恋爱日记
  50. 「HTML+CSS」--自定义加载动画【010】
  51. Wireless power transmission using LCC compensation scheme
  52. vue项目中使用了vw适配方案,引入第三方ui框架mint-ui时,适配问题解决
  53. A love diary about http
  54. "Custom" animation [CSS + 010]
  55. Git address and common tool address that front end user must know
  56. 【BBED】 sys.bootstrap$ 对象的恢复
  57. Flat array of web front end array processing
  58. vue中deep的用法
  59. A love diary about http
  60. "Custom" animation [CSS + 010]