首页 > 其他分享 >spring-boot-starter-webflux

spring-boot-starter-webflux

时间:2022-11-14 17:22:22浏览次数:36  
标签:return spring boot class user Mono public starter webflux

webflux:
反应式编程reactor的产物,采用发布订阅模式,引入netty的nio,比较适合IO密集型应用。
因普遍应用使用的DB链接是IO阻塞型,因此在一般应用中无法体现它的优势。redis和mongoDB支持reactor。

前言: Flux && Mono

Flux: 可返回1到n个结果,
Mono: 仅返回0到1个结果

MAVEN 依赖:

            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
           	<version>2.1.9.RELEASE</version>
        </dependency>

注意: spring-boot-starter-webflux 和 spring-boot-starter-webmvc 会冲突,因此如果有webmvc请排除掉。

启动引入

@SpringBootApplication
@EnableWebFlux
public class TestWebfluxApp {
    SpringApplication.run(TestWebfluxApp.class, args);
}

controller方式使用

@Slf4j
@RequestMapping("/webflux")
@RestController
public class TestWebFluxController {
    

    /**
     * Mono
     * @param user
     * @return
     */
    @RequestMapping("/user/new")
    public Mono<String> user(@RequestBody User user){
        System.out.println("user:" +user);
        WebClient webClient = WebClient.create("http://127.0.0.1:8089");
        Mono<ClientResponse> exchange = webClient.get().uri("/algo/yumc/get?test=junitTest1234&sk={0}", "123456").exchange();
        System.out.println("user2: ---------------------");
        Mono<String> mono = Mono.just("1234567");
        return exchange.block(Duration.ofSeconds(1)).bodyToMono(String.class);
    }

    /**
     * Flux
     * @return
     */
    @RequestMapping("/user/list")
    public Flux<String> user(){
        WebClient webClient = WebClient.create("http://127.0.0.1:8089");
        Mono<ClientResponse> exchange = webClient.get().uri("/algo/yumc/get?test=junitTest1234&sk={0}", "123456").exchange();
        System.out.println("user2: ---------------------");
        Flux<String> stringFlux = Flux.just("1234","5678");
        return exchange.block(Duration.ofSeconds(1)).bodyToFlux(String.class);
    }

endpoint方式使用

@Configuration
public class WebfluxConfiguration {

    @Autowired
    private UserHandler userHandler;

    @Bean
    @Qualifier("userRouter")
    public RouterFunction<ServerResponse> userRouter(){
        return RouterFunctions.nest(RequestPredicates.path("/flux/user"),
                RouterFunctions.route(RequestPredicates.GET("/info"),  UserHandler::getUserInfo)
                                .andRoute(RequestPredicates.GET("/list"), UserHandler::getUserList));
    }
	
	
	@Component
public class UserHandler {

    /**
     * request
     * @param serverRequest
     * @return
     */
    public static Mono<ServerResponse> getUserInfo(ServerRequest serverRequest) {
        User user = new User();
        user.setId(12345);
        user.setName("张三");
        return ServerResponse.ok()
                .contentType(MediaType.TEXT_PLAIN)
                .body(BodyInserters.fromObject(user));
    }

常见异常:

  • org.springframework.web.reactive.function.UnsupportedMediaTypeException: Content type 'text/xml;charset=UTF-8' not supported for bodyType

    原因:MediaType.TEXT_PLAIN 转变为 MediaType.APPLICATION_JSON 即可

标签:return,spring,boot,class,user,Mono,public,starter,webflux
From: https://www.cnblogs.com/DennyZhao/p/16889635.html

相关文章

  • springboot整合kafka
    maven配置:<properties><java.version>1.8</java.version><oracle.version>11.2.0.4</oracle.version></properties><!--kafka--><dependency>......
  • SpringBoot 05: 接口架构风格 + RESTful接口风格
    接口定义API(ApplicationProgrammingInterface,应用程序接口)是一些预先定义的接口(如函数、HTTP接口,或指软件系统不同组成部分衔接的约定)是用来提供应用程序与开......
  • rocketMq springboot2 发送广播消息
    广播消息:一个点发送,所有有监听订阅的程序都能收到消息。应用场景:一个配置更新了,其他点都需要知道配置更新需加载。 mq创建主要是创建组时与队列有点区别mqadminup......
  • rocketMq springboot2 发送有序消息
    有序消息:所有信息往mq中,在broker.conf配置文件中指定产生队列数量。如果是普通队列时,所有消息,会分发到默认队列的各个队列中。是无序的。有序则是,所有消息发送,都指定一个......
  • 部署 Spring Boot 应用程序
    在部署应用程序时,SpringBoot的灵活打包选项提供了大量选择。您可以将SpringBoot应用程序部署到各种云平台、虚拟机/真实机上,或者使它们完全可执行Unix系统。1.部署......
  • Spring Boot 进阶——如何使用@Async注解提升API并发
    @Async注解用法1.在方法上使用@Async注解,申明该方法是一个异步任务;2.在类上面使用@Async注解,申明该类中的所有方法都是异步任务;3.使用此注解的方法的类对象,必须是spring......
  • 第2章SpringMVC注解式开发-@RequestMapping
    第2章SpringMVC注解式开发[email protected]@RequestMapping定义请求规则2.1.1指定模块名称​ 通过@RequestMapping注解可以定义处理器对于请求的映射规则......
  • Spring框架中都用到了哪些设计模式 ?
    1.简单工厂模式简单工厂模式的本质就是一个工厂类根据传入的参数,动态的决定实例化哪个类。Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得......
  • spring boot 微服务在进行数据库操作时总是报错Connections reset
    在前端对后台进行数据请求时,访问二,三次后台服务器就报Connectionreset必须重启后才能进行再次访问。最后发现在配置文件中添加如下:spring:r2dbc:pool:ma......
  • rocketMq springboot2接入配置
    rocketmq的接入配置。 引入jar包<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId></dependen......