# Hello-WebFlux **Repository Path**: entlib/hello-webflux ## Basic Information - **Project Name**: Hello-WebFlux - **Description**: Spring WebFlux 是 Spring Framework 5.0中引入的新的响应式web框架。与Spring MVC不同,它不需要Servlet API,是完全异步且非阻塞的,并且通过Reactor项目实现了Reactive Streams规范。 本仓库基于Spring WebFlux创建响应式Web API。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2023-01-24 - **Last Updated**: 2023-12-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Hello-WebFlux 传统的基于Servlet 的Web框架,如Spring MVC,本质上都是阻塞式和多线程的,每个连接都会使用一个线程。 在请求处理的时候,会在线程池中拉取一个工作者(Worker)线程来对请求进行处理。同时,请求线程是阻塞的,直到工作者线程提示它已经完成。 在面临大量请求负载时,异步Web 框架能够以更少的线程实现更好的可扩展性,从而减少线程管理的开销。 Spring 框架提供了一个主要基于 Reactor 项目的非阻塞、异步Web 框架,以解决Web 应用和API 中更多的可扩展性需求,这个就是Spring WebFlux 新框架。Spring WebFlux 是真正的响应式Web框架,而Spring MVC 是基于Servlet的,依赖多线程来处理多个请求。 因为Spring WebFlux 没有与Servlet API 耦合,所以它的运行并不需要Servlet 容器。它可以运行在任意非阻塞Web 容器中,包括Netty、Undertow、Tomcat、Jetty或任意Servlet 3.1 及以上的容器。WebFlux 应用默认的嵌入式服务器是Netty,而不是Tomcat。 在开发过程中,Spring WebFlux 和 Spring MVC 最显著的区别在于需要添加到构建文件中的依赖项不同。Spring WebFlux 需要添加spring-boot-starter-webflux 依赖项。 #### Spring WebFlux Spring WebFlux 是 Spring Framework 5.0中引入的新的响应式web框架。与Spring MVC不同,它不需要Servlet API,是完全异步且非阻塞的,并且通过Reactor项目实现了Reactive Streams规范。 ![](webflux.png) 本仓库基于Spring WebFlux创建响应式Web API。 #### WebClient 从Spring 3.0 开始就引入了RestTemplate 对象,RestTemplate 提供的方法处理的都是非响应式的领域类型和集合。 如果想要以响应式的方式使用响应数据,就需要使用Flux 或 Mono 对其进行包装。 Spring WebFlux 框架提供了WebClient,它作为响应式版本的RestTemplate。 WebClient 有一个流畅(Fluent)的构建者风格接口,能够让我们描述和发送请求。 ![](webclient.png) 使用 WebClient 对象的通用模式: - 创建WebClient 实例或注入WebClient bean对象; - 指定要发送请求的HTTP 方法; - 指定请求中 URI和Header 信息; - 提交请求; - 消费响应; # Hello RSocket #### 什么是 RSocket 协议? RSocket 是一种二进制协议,可以使用任何字节流传输方式,比如 TCP,UDP,WebSocket,Aeron。 RSocket是一个二进制的点对点通信协议,适用于分布式应用。从这个意义上说,它是HTTP等其他协议的替代品。 RSocket 保证了传输的高效,它是一种基于Reactive Streams背压的双向,多路复用,基于消息的二进制协议。 ![](rsocket2.png) # Hello Actuator Spring Boot Actuator 模块提供了生产级别的功能,包括可以监控Spring Boot应用和获取它的各种指标,比如健康检查、审计、指标收集、HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用。 Actuator 的特性是通过各种端点提供的,这些端点可以通过 HTTP 调用,也可以通过 JMX MBean使用。 默认情况下,只有/health 端点是启用的。大多数Actuator 端点会携带敏感信息,应该被保护起来。可以通过设置 management.endpoints.web.exposure.include 和 management.endpoints.web.exposure.exclude 属性有选择地对外暴露它们。 另外,Actuator 还有一个很棒的特性就是能够进行自定义,以满足应用的特定需求。 因为暴露内部信息的特性,Actuator 也可以和一些外部的应用监控系统整合,如Prometheus、Graphite、DataDog、Influx、Wavefront、New Relic等。 #### Docker 和 Kubernetes 通过上述示例项目,演示了如何创建docker镜像,以及部署到Kubernetes 环境。 ![](Kubernetes_pure_logo.png)