reactor编程如何处理并发远程调用

1、搭建一个简单的webflux工程

pom依赖很简单,就一个,让它去传递依赖去,底层依赖的是4.1.72版本的netty,目前最新是4.1.73了:


    
      org.springframework.boot
      spring-boot-starter-webflux
      2.6.2
    

默认会有很多的debug日志,影响调试观察的话, 可以设置日志logback.xml:



    
        System.out
        
            [%d] [%thread] %-5level %logger{36} - %msg%n
        
    
    
        
    

启动类,里面可以根据配置来指定io worker数量,默认会使用runtime去取核数

@SpringBootApplication
public class WebfluxApplication {
    
    public static void main(String[] args) {
        System.setProperty("reactor.netty.ioWorkerCount", "4");
        SpringApplication.run(WebfluxApplication.class, args);
    }
}

2、编写并行调用的controller

    @GetMapping("/zip")
    public Mono zip() {
        Mono mono1 = client.get().uri("abc1").retrieve().bodyToMono(String.class);
        Mono mono2 = client.get().uri("abc2").retrieve().bodyToMono(String.class);
        return Mono.zip(mono1, mono2, User::combine);
    }
public class User {
    static ObjectMapper objectMapper = new ObjectMapper();

    public static String combine(String s1, String s2) {
        try {
            Map map1 = objectMapper.readValue(s1, new TypeReference>() {
                
            });
            Map map2 = objectMapper.readValue(s2, Map.class);
            map1.putAll(map2);
            return objectMapper.writeValueAsString(map1);
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return "test";
    }
    
}

在这里呢, 是同时调用两个接口, 并把两个结果作整合。

你可能感兴趣的:(java)