- 浏览: 2542566 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
nation:
你好,在部署Mesos+Spark的运行环境时,出现一个现象, ...
Spark(4)Deal with Mesos -
sillycat:
AMAZON Relatedhttps://www.godad ...
AMAZON API Gateway(2)Client Side SSL with NGINX -
sillycat:
sudo usermod -aG docker ec2-use ...
Docker and VirtualBox(1)Set up Shared Disk for Virtual Box -
sillycat:
Every Half an Hour30 * * * * /u ...
Build Home NAS(3)Data Redundancy -
sillycat:
3 List the Cron Job I Have>c ...
Build Home NAS(3)Data Redundancy
WebFlux and Reactive(1)Performance Basic Compare
Unit test and Compare
https://blog.51cto.com/liukang/2090202
Create non-blocking
https://stackoverflow.com/questions/42299455/spring-webflux-and-reading-from-database
Wrap a blocking call
https://projectreactor.io/docs/core/release/reference/#faq.wrap-blocking
Follow this blog and do some of my testing
https://blog.51cto.com/liukang/2090202
The sample codes are all here
https://github.com/luohuazju/sillycat-spring-cloud
Wrk Performance Testing
Check the open files limit on MAC
> ulimit -n
256
> ulimit -n 2048
After set it bigger, check again
> ulimit -n
2048
Some test results from my samples
For tomcat in traditional MVC 200 threads and request per thread Model
> wrk -t30 -c3000 -d60s http://localhost:8081/hello/100
Running 1m test @ http://localhost:8081/hello/100
30 threads and 3000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 857.16ms 310.59ms 1.14s 81.18%
Req/Sec 64.16 28.50 210.00 71.56%
105101 requests in 1.00m, 15.64MB read
Requests/sec: 1749.14
Transfer/sec: 266.47KB
For jetty in flux/mono in servlet3.1 adapter mod in jetty
> wrk -t30 -c3000 -d60s http://localhost:8082/hello/100
Running 1m test @ http://localhost:8082/hello/100
30 threads and 3000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 450.88ms 221.82ms 1.98s 75.98%
Req/Sec 126.44 62.90 460.00 67.91%
199631 requests in 1.00m, 27.61MB read
Requests/sec: 3321.27
Transfer/sec: 470.30KB
For netty in flux/mono
> wrk -t30 -c3000 -d60s http://localhost:8083/hello/100
Running 1m test @ http://localhost:8083/hello/100
30 threads and 3000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 104.63ms 6.99ms 585.20ms 91.82%
Req/Sec 532.40 195.94 0.91k 69.98%
872104 requests in 1.00m, 89.82MB read
Requests/sec: 14514.76
Transfer/sec: 1.49MB
Add - - timeout and - - latency in the parameters
> wrk -t16 -c100 -d60s --timeout 10s http://127.0.0.1:8083/hello/100 --latency
Running 1m test @ http://127.0.0.1:8083/hello/100
16 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 103.56ms 1.86ms 111.58ms 61.71%
Req/Sec 58.10 4.85 89.00 97.53%
Latency Distribution
50% 103.27ms
75% 104.96ms
90% 106.20ms
99% 107.56ms
55584 requests in 1.00m, 5.72MB read
Requests/sec: 925.17
Transfer/sec: 97.58KB
Install wrk on ubuntu system
https://github.com/wg/wrk/wiki/Installing-Wrk-on-Linux
> sudo apt-get install build-essential libssl-dev git -y
> git clone https://github.com/wg/wrk.git wrk
> cd wrk/
> make
> sudo cp wrk /usr/local/bin
On ubuntu, no socket issue, I split the test server and the host server into 2 machines and I run the tests again
> wrk -t4 -c1000 -d60s --timeout 10s http://10.3.10.96:8081/hello/100 --latency
Running 1m test @ http://10.3.10.96:8081/hello/100
4 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 650.34ms 220.08ms 3.04s 79.55%
Req/Sec 384.93 99.62 0.89k 68.29%
Latency Distribution
50% 615.78ms
75% 794.01ms
90% 900.03ms
99% 1.17s
90984 requests in 1.00m, 13.54MB read
Requests/sec: 1514.54
Transfer/sec: 230.73KB
Here is some key point in the sample Projects.
For Tomcat Servlet some key points in configuration and Java Codes
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath />
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
@Api(value = "/hello/")
@RestController
public class HelloController {
@ApiOperation(value = "hello latency", response = String.class)
@GetMapping("/hello/{latency}")
public String hello(@PathVariable long latency) {
try {
TimeUnit.MILLISECONDS.sleep(latency); // 1
} catch (InterruptedException e) {
return "Error during thread sleep";
}
return "Welcome to reactive world with latency " + latency ;
}
}
Jetty with Servlet 3.1
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-reactor-netty</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-parser</artifactId>
<version>1.0.39</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
@ApiOperation(value = "hello latency", response = String.class)
@GetMapping("/hello/{latency}")
public Mono<String> hello(@PathVariable int latency) {
return Mono.just("Welcome to reactive world " + latency).delayElement(Duration.ofMillis(latency));
}
@GetMapping("/go/{latency}")
public Mono<String> go(@PathVariable int latency) {
Mono<String> mono = Mono.fromCallable(() -> {
try {
Thread.sleep(latency);
} catch (InterruptedException e) {
e.printStackTrace();
}
return String.format("processing nonblocking %s", latency);
});
return mono.subscribeOn(Schedulers.elastic());
}
@GetMapping("/slow/{latency}")
public Mono<String> slow(@PathVariable int latency) {
try {
Thread.sleep(latency);
} catch (InterruptedException e) {
e.printStackTrace();
}
return Mono.just("Welcome to reactive world " + latency);
}
Reactor Netty
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</dependency>
@GetMapping("/hello/{latency}")
public Mono<String> hello(@PathVariable int latency) {
return Mono.just("Welcome to reactive world " + latency).delayElement(Duration.ofMillis(latency));
}
@GetMapping("/go/{latency}")
public Mono<String> go(@PathVariable int latency) {
Mono<String> mono = Mono.fromCallable(() -> {
try {
Thread.sleep(latency);
} catch (InterruptedException e) {
e.printStackTrace();
}
return String.format("processing nonblocking %s", latency);
});
return mono.subscribeOn(Schedulers.elastic());
}
@GetMapping("/slow/{latency}")
public Mono<String> slow(@PathVariable int latency) {
try {
Thread.sleep(latency);
} catch (InterruptedException e) {
e.printStackTrace();
}
return Mono.just("Welcome to reactive world " + latency);
}
Related URLs for all my sample projects
Servlet API under Tomcat
http://localhost:8081/hello/1000
http://localhost:8081/swagger-ui.html#/hello-controller
http://localhost:8081/actuator
Jetty with Servlet 3.1
http://localhost:8082/hello/1000
http://localhost:8082/swagger-ui.html#/hello-controller
http://localhost:8082/actuator
Reactor Netty
http://localhost:8083/hello/1000
http://localhost:8083/actuator
http://localhost:8083/go/1000 (Wrap Sync Blocking Method)
http://localhost:8083/slow/1000 (Sync Blocking Method in Side Controller)
References:
Summary
https://blog.51cto.com/liukang/2090163
https://blog.lovezhy.cc/2018/12/29/webflux%E6%80%A7%E8%83%BD%E9%97%AE%E9%A2%98/
https://www.jianshu.com/p/7ee89f70dfe5
https://blog.51cto.com/liukang/2090183
https://blog.51cto.com/liukang/2090202
https://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-web-servers.html
Gatling test
https://blog.51cto.com/liukang/2090202
https://github.com/gatling/gatling-sbt-plugin-demo
https://github.com/luohuazju/sillycat-gatling
Web flux
https://blog.51cto.com/liukang/2090198
Unit test and Compare
https://blog.51cto.com/liukang/2090202
Create non-blocking
https://stackoverflow.com/questions/42299455/spring-webflux-and-reading-from-database
Wrap a blocking call
https://projectreactor.io/docs/core/release/reference/#faq.wrap-blocking
Follow this blog and do some of my testing
https://blog.51cto.com/liukang/2090202
The sample codes are all here
https://github.com/luohuazju/sillycat-spring-cloud
Wrk Performance Testing
Check the open files limit on MAC
> ulimit -n
256
> ulimit -n 2048
After set it bigger, check again
> ulimit -n
2048
Some test results from my samples
For tomcat in traditional MVC 200 threads and request per thread Model
> wrk -t30 -c3000 -d60s http://localhost:8081/hello/100
Running 1m test @ http://localhost:8081/hello/100
30 threads and 3000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 857.16ms 310.59ms 1.14s 81.18%
Req/Sec 64.16 28.50 210.00 71.56%
105101 requests in 1.00m, 15.64MB read
Requests/sec: 1749.14
Transfer/sec: 266.47KB
For jetty in flux/mono in servlet3.1 adapter mod in jetty
> wrk -t30 -c3000 -d60s http://localhost:8082/hello/100
Running 1m test @ http://localhost:8082/hello/100
30 threads and 3000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 450.88ms 221.82ms 1.98s 75.98%
Req/Sec 126.44 62.90 460.00 67.91%
199631 requests in 1.00m, 27.61MB read
Requests/sec: 3321.27
Transfer/sec: 470.30KB
For netty in flux/mono
> wrk -t30 -c3000 -d60s http://localhost:8083/hello/100
Running 1m test @ http://localhost:8083/hello/100
30 threads and 3000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 104.63ms 6.99ms 585.20ms 91.82%
Req/Sec 532.40 195.94 0.91k 69.98%
872104 requests in 1.00m, 89.82MB read
Requests/sec: 14514.76
Transfer/sec: 1.49MB
Add - - timeout and - - latency in the parameters
> wrk -t16 -c100 -d60s --timeout 10s http://127.0.0.1:8083/hello/100 --latency
Running 1m test @ http://127.0.0.1:8083/hello/100
16 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 103.56ms 1.86ms 111.58ms 61.71%
Req/Sec 58.10 4.85 89.00 97.53%
Latency Distribution
50% 103.27ms
75% 104.96ms
90% 106.20ms
99% 107.56ms
55584 requests in 1.00m, 5.72MB read
Requests/sec: 925.17
Transfer/sec: 97.58KB
Install wrk on ubuntu system
https://github.com/wg/wrk/wiki/Installing-Wrk-on-Linux
> sudo apt-get install build-essential libssl-dev git -y
> git clone https://github.com/wg/wrk.git wrk
> cd wrk/
> make
> sudo cp wrk /usr/local/bin
On ubuntu, no socket issue, I split the test server and the host server into 2 machines and I run the tests again
> wrk -t4 -c1000 -d60s --timeout 10s http://10.3.10.96:8081/hello/100 --latency
Running 1m test @ http://10.3.10.96:8081/hello/100
4 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 650.34ms 220.08ms 3.04s 79.55%
Req/Sec 384.93 99.62 0.89k 68.29%
Latency Distribution
50% 615.78ms
75% 794.01ms
90% 900.03ms
99% 1.17s
90984 requests in 1.00m, 13.54MB read
Requests/sec: 1514.54
Transfer/sec: 230.73KB
Here is some key point in the sample Projects.
For Tomcat Servlet some key points in configuration and Java Codes
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath />
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
@Api(value = "/hello/")
@RestController
public class HelloController {
@ApiOperation(value = "hello latency", response = String.class)
@GetMapping("/hello/{latency}")
public String hello(@PathVariable long latency) {
try {
TimeUnit.MILLISECONDS.sleep(latency); // 1
} catch (InterruptedException e) {
return "Error during thread sleep";
}
return "Welcome to reactive world with latency " + latency ;
}
}
Jetty with Servlet 3.1
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-reactor-netty</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-parser</artifactId>
<version>1.0.39</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
@ApiOperation(value = "hello latency", response = String.class)
@GetMapping("/hello/{latency}")
public Mono<String> hello(@PathVariable int latency) {
return Mono.just("Welcome to reactive world " + latency).delayElement(Duration.ofMillis(latency));
}
@GetMapping("/go/{latency}")
public Mono<String> go(@PathVariable int latency) {
Mono<String> mono = Mono.fromCallable(() -> {
try {
Thread.sleep(latency);
} catch (InterruptedException e) {
e.printStackTrace();
}
return String.format("processing nonblocking %s", latency);
});
return mono.subscribeOn(Schedulers.elastic());
}
@GetMapping("/slow/{latency}")
public Mono<String> slow(@PathVariable int latency) {
try {
Thread.sleep(latency);
} catch (InterruptedException e) {
e.printStackTrace();
}
return Mono.just("Welcome to reactive world " + latency);
}
Reactor Netty
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</dependency>
@GetMapping("/hello/{latency}")
public Mono<String> hello(@PathVariable int latency) {
return Mono.just("Welcome to reactive world " + latency).delayElement(Duration.ofMillis(latency));
}
@GetMapping("/go/{latency}")
public Mono<String> go(@PathVariable int latency) {
Mono<String> mono = Mono.fromCallable(() -> {
try {
Thread.sleep(latency);
} catch (InterruptedException e) {
e.printStackTrace();
}
return String.format("processing nonblocking %s", latency);
});
return mono.subscribeOn(Schedulers.elastic());
}
@GetMapping("/slow/{latency}")
public Mono<String> slow(@PathVariable int latency) {
try {
Thread.sleep(latency);
} catch (InterruptedException e) {
e.printStackTrace();
}
return Mono.just("Welcome to reactive world " + latency);
}
Related URLs for all my sample projects
Servlet API under Tomcat
http://localhost:8081/hello/1000
http://localhost:8081/swagger-ui.html#/hello-controller
http://localhost:8081/actuator
Jetty with Servlet 3.1
http://localhost:8082/hello/1000
http://localhost:8082/swagger-ui.html#/hello-controller
http://localhost:8082/actuator
Reactor Netty
http://localhost:8083/hello/1000
http://localhost:8083/actuator
http://localhost:8083/go/1000 (Wrap Sync Blocking Method)
http://localhost:8083/slow/1000 (Sync Blocking Method in Side Controller)
References:
Summary
https://blog.51cto.com/liukang/2090163
https://blog.lovezhy.cc/2018/12/29/webflux%E6%80%A7%E8%83%BD%E9%97%AE%E9%A2%98/
https://www.jianshu.com/p/7ee89f70dfe5
https://blog.51cto.com/liukang/2090183
https://blog.51cto.com/liukang/2090202
https://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-web-servers.html
Gatling test
https://blog.51cto.com/liukang/2090202
https://github.com/gatling/gatling-sbt-plugin-demo
https://github.com/luohuazju/sillycat-gatling
Web flux
https://blog.51cto.com/liukang/2090198
发表评论
-
Update Site will come soon
2021-06-02 04:10 1672I am still keep notes my tech n ... -
Stop Update Here
2020-04-28 09:00 310I will stop update here, and mo ... -
NodeJS12 and Zlib
2020-04-01 07:44 468NodeJS12 and Zlib It works as ... -
Docker Swarm 2020(2)Docker Swarm and Portainer
2020-03-31 23:18 362Docker Swarm 2020(2)Docker Swar ... -
Docker Swarm 2020(1)Simply Install and Use Swarm
2020-03-31 07:58 364Docker Swarm 2020(1)Simply Inst ... -
Traefik 2020(1)Introduction and Installation
2020-03-29 13:52 330Traefik 2020(1)Introduction and ... -
Portainer 2020(4)Deploy Nginx and Others
2020-03-20 12:06 424Portainer 2020(4)Deploy Nginx a ... -
Private Registry 2020(1)No auth in registry Nginx AUTH for UI
2020-03-18 00:56 428Private Registry 2020(1)No auth ... -
Docker Compose 2020(1)Installation and Basic
2020-03-15 08:10 366Docker Compose 2020(1)Installat ... -
VPN Server 2020(2)Docker on CentOS in Ubuntu
2020-03-02 08:04 445VPN Server 2020(2)Docker on Cen ... -
Buffer in NodeJS 12 and NodeJS 8
2020-02-25 06:43 377Buffer in NodeJS 12 and NodeJS ... -
NodeJS ENV Similar to JENV and PyENV
2020-02-25 05:14 468NodeJS ENV Similar to JENV and ... -
Prometheus HA 2020(3)AlertManager Cluster
2020-02-24 01:47 414Prometheus HA 2020(3)AlertManag ... -
Serverless with NodeJS and TencentCloud 2020(5)CRON and Settings
2020-02-24 01:46 332Serverless with NodeJS and Tenc ... -
GraphQL 2019(3)Connect to MySQL
2020-02-24 01:48 243GraphQL 2019(3)Connect to MySQL ... -
GraphQL 2019(2)GraphQL and Deploy to Tencent Cloud
2020-02-24 01:48 445GraphQL 2019(2)GraphQL and Depl ... -
GraphQL 2019(1)Apollo Basic
2020-02-19 01:36 321GraphQL 2019(1)Apollo Basic Cl ... -
Serverless with NodeJS and TencentCloud 2020(4)Multiple Handlers and Running wit
2020-02-19 01:19 307Serverless with NodeJS and Tenc ... -
Serverless with NodeJS and TencentCloud 2020(3)Build Tree and Traverse Tree
2020-02-19 01:19 310Serverless with NodeJS and Tenc ... -
Serverless with NodeJS and TencentCloud 2020(2)Trigger SCF in SCF
2020-02-19 01:18 286Serverless with NodeJS and Tenc ...
相关推荐
使用Spring WebFlux和Reactive MongoDB构建Reactive Rest API 阅读教程: : 要求 Java-1.8.x Maven-3.xx MongoDB-3.xx 设定步骤 1.克隆应用程序 git clone ...
### Java响应式编程:Reactor 3 和 Spring WebFlux #### 一、响应式编程简介 响应式编程(Reactive Programming)是一种编程范式,它允许开发者通过声明式的方式处理异步数据流和事件。这种编程模式的核心在于能够...
git clone https://github.com/batuhaniskr/spring-webflux-reactive-rest.git2.使用maven生成并运行服务器应用程序MongoDB需要运行。 sudo mongodmvn clean installmvn spring-boot:run 应用程序从示例命令创建...
Spring Boot Webflux反应式Mongo 这是一个示例应用程序,显示了如何使用 Sprint Boot2 Spring Webflux SpringReact数据MongoDb Spring SecurityReact式Webflux 请参阅以下页面以获取更多详细信息 Spring ...
Ghosh D Functional and Reactive Domain Modeling 2017 带目录完整英文版
## SpringWebfluxReactiveStockQuoteServiceApplication 一个应用程序演示了spring的React式编程模型,并... Spring BOOT 2.0.0.RELEASE(Spring 5.0.4 Webflux) Lombok1.16.20 指令执行项目 mvn全新安装 示例网址
从 Reactive 到 WebFlux1,这一主题主要探讨了现代应用程序如何通过采用Reactive编程模型来应对性能挑战和资源管理的问题。Reactive编程是一种异步、非阻塞的编程范式,它旨在优化系统资源的使用,从而提高软件性能...
Reactive、WebFlux、Mono和Flux到底是什么
After reading and using this book, you'll be proficient in programming reactive streams for Java in order to optimize application performance, and improve memory management and data exchanges. ...
使用JWT与Spring WebFlux和Spring Security Reactive进行身份验证和授权首先阅读的好文档在开始之前,我建议您先阅读下一份参考启用Spring WebFlux安全性在你的应用程序首先使Webflux安全@EnableWebFluxSecurity...
Stream API- Reactive programming using RxJava 2 and Reactor- Spring WebFlux- Reactive support in Spring Data MongoDB and Spring Security- Developing reactive RESTful web services using Spring WebFlux...
与传统的基于Servlet的Spring MVC不同,WebFlux基于Reactive Streams,支持异步、非阻塞I/O,能够更好地应对高并发场景。WebFlux提供了一个函数式和声明式的编程模型,可以构建高性能、低延迟的Web服务。 **...
Harness reactive programming to build scalable and fault-tolerant distributed systems using Scala and Akka About This Book Use the concepts of reactive programming to build distributed systems ...
from imperative to reactive from imperative to reactivefrom imperative to reactivefrom imperative to reactive
### Spring5 WebFlux模块与Reactive Programming #### 一、Spring5 WebFlux简介 随着互联网技术的发展,用户对于应用程序的响应速度和资源利用效率提出了更高的要求。Spring5引入了WebFlux模块来满足这一需求,它...
Reactive Messaging Patterns with the Actor Model: Applications and Integration in Scala and Akka