1、搭建一个简单的webflux工程
pom依赖很简单,就一个,让它去传递依赖去,底层依赖的是4.1.72版本的netty,目前最新是4.1.73了:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>2.6.2</version>
</dependency>
</dependencies>
默认会有很多的debug日志,影响调试观察的话, 可以设置日志logback.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<Target>System.out</Target>
<encoder>
<pattern>[%d] [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="stdout" />
</root>
</configuration>
启动类,里面可以根据配置来指定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<String> zip() {
Mono<String> mono1 = client.get().uri("abc1").retrieve().bodyToMono(String.class);
Mono<String> 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<String, String> map1 = objectMapper.readValue(s1, new TypeReference<Map<String, String>>() {
});
Map<String, String> 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";
}
}
在这里呢, 是同时调用两个接口, 并把两个结果作整合。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。