hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

实战SpringCloud相应式微效劳系列教程(第九章)运用Spring WebFlux构建相应式RESTful效劳

2019-11-18杂谈搜奇网34°c
A+ A-

本文为实战SpringCloud响应式微效劳系列教程第九章,解说运用Spring WebFlux构建响应式RESTful效劳。提议没有之前基本的童鞋,先看之前的章节,章节目次放在文末。

从本节最先我们将正式进入构建响应式效劳的天下。在Spring boot的基本上,我们将引入全新的Spring WebFlux框架。

WebFlux称号中的Flux来源于上章节引见的来自Reactor框架中的Flux组件。该框架中包括了对响应式HTTP、效劳器推送事宜以及Websocket的客户端和效劳端的支撑。

在构架响应式效劳上,WebFlux支撑两种差异的编程模子:

  • 第一种是与SpringMvc中一样运用的基于java注解的体式格局;
  • 第二种是基于java8中供应的lambda表达式的函数式编程模子。

1.1运用 Spring Initializer初始化响应式web运用

建立WebFlux运用最简朴的体式格局就是运用Spring boot供应的Spring Initializer初始化模板。

直接接见Spring Initializer网站(http://start.spring.io),挑选建立一个maven或许Gradle项目并制订响应的Group和Artifact,然后在增加依靠中挑选maven举行代码依靠治理。

翻开所下载项目中的pom文件,会找到以下依靠。

  • spring-boot-starter-webflux组成响应式web顺序开辟的基本;
  • spring-boot-starter-test是包括JUnit、Spring boot Test、Mockito、AssertJ、JSONAssert以及Hamcerst等东西在内的测试组件库;
  • reactor-test则是用来测试Reactor框架的测试组件;
  • spring-boot-starter-data-mongodb-reactive和spring-boot-starter-data-redis-reactive则是响应式数据接见组件。

 

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <!--Lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
            <version>1.16.22</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
        </dependency>
        <!--  redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

 

至此,运用Spring WebFlux构架响应式效劳的基本环境已预备终了。

关于Spring WebFlux和传统的SpringMvc的关联能够自行百度相识,这里不做过量引见。

1.2运用注解编程模子建立响应式RESTful效劳

基于注解编程模子来建立响应式RESTful效劳与运用传统SpringMvc异常相似。经由过程控制响应式编程的基本观点和技能,在webflux中运用这类编程模子几乎没有任何进修本钱。

构建第一个响应式RESTful效劳

第一个响应式RESTful效劳来自于对之前HelloController示例举行革新,革新以后的代码以下:

 

@RestController
public class Helloontroller{
     @GetMapping("/")
     public Mono<String> index(){
           return Mono.just("Hello Spring Boot");
     }
}

 

以上代码只要一个处所值得注意,即index()要领的返回值范例是Mono<String>范例,个中包括的字符串"Hello Spring Boot"或作为HTTP的响应内容。

在浏览器中接见会获得以下效果:

从以上代码能够看到运用Spring WebFlux和运用 Spring Mvc的差异在于,WebFlux所运用的范例是与响应式编程相对应的Flux和Mono对象,而不是简朴的POJO,关于简朴的Hello Word气力来讲,这两个之间并没有什么太大的差异。

然则关于庞杂的运用来讲,响应式编程的背压机制就会表现出来,能够带来团体机能的提拔。在后续解说中会有完全示例代码。

1.3运用函数式模子建立响应式RESTful效劳

这部分内容与传统的SpringMvc构建RESTful效劳有较大的差异。

(1)函数式编程模子

在Spring WebFlux中,函数式编程模子的中心观点是Router Functions,对标@Controller@RequestMapping等规范的Spring Mvc注解。

Router Functions供应一套函数式的API,用于建立Router和Handler对象。个中我们能够简朴的把Handler对应为Controller,把Router对应为RequestMapping。

当我们提议一个长途调用时,传入的HTTP要求由HandlerFunction处置惩罚,HandlerFunction本质上是一个吸收ServerRequest并返回一个Mono<ServerResponse>的函数。ServerRequest和ServerResponse是一个不可变的接口,用来供应对底层HTTTP音讯的友好接见。

细致代码示例以下:

 

public class HelloWordHandlerFunction impllements HandlerFunction<ServerResponse>{
    @Override
    public Mono<ServerResponse> handle(ServerRequest request){
         return ServerResponse.ok().body(BodyInserters.fromObject("Hello Word"))
    }
}

 

关于ServerRequest和ServerResponse我们在这里不做过量引见,细致相识可查阅相干材料。

以上代码将ServerRequest和ServerResponse组合到一同建立了HandlerFunction。HandlerFunction是一个接口,能够经由过程完成该接口中的handl()要领来建立定制化的要求响应处置惩罚机制。

一般我们会针对某个范畴实体对象编写多个处置惩罚函数,所以引荐将多个处置惩罚函数分组到一个特地的Handler类中。比方我们编写一个PersonHandler特地完成种种针对Person范畴对象的处置惩罚函数。

代码以下:

 

public class PersonHandler{
    @Autowired
    private PersonService personService;
    public Mono<ServerResponse> getPersons(ServerRequest request){
        return ServerResponse.ok().body(this.personService.getPersons(),Person.class)
   }
}

 

(2)RouterFunction

上面我们已经由过程HandlerFunction建立了要求的逻辑处置惩罚,接下来需要把细致的逻辑关联起来,RouterFunction能够协助我们完成这一个目的。RouterFunction将传入的要求路由传入到细致的函数,它吸收ServerRequest 并返回一个Mono<ServerResponse>

假如要求与特定路由婚配则返回处置惩罚函数的效果,不然返回一个空的Mono对象。RouterFunction与@ReuestMapping相似。代码以下:

 

public class personRouter{
@Bean
public RouterFunction<ServerResponse> routerPerson(PersonHandler personHandler){
      return RouterFunctions.route(RequestPredicates.GET("/person")
      .add(RequestPredicates.accept(MediaType.APPLICATION_JSON)),
      personHandler::getPersons)
}
}

 

本章节完

系列章节目次

实战SpringCloud响应式微效劳系列教程(第一章)

实战SpringCloud响应式微效劳系列教程(第二章)

实战SpringCloud响应式微效劳系列教程(第三章)

实战SpringCloud响应式微效劳系列教程(第四章)

实战SpringCloud响应式微效劳系列教程(第五章)

实战SpringCloud响应式微效劳系列教程(第六章)

实战SpringCloud响应式微效劳系列教程(第七章)

实战SpringCloud响应式微效劳系列教程(第八章)

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
实战SpringCloud相应式微效劳系列教程(第九章)运用Spring WebFlux构建相应式RESTful效劳

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282240.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>