From 19875d8e3f4dbeaca6c1441ae204e673a9e0c2b8 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Mon, 26 Mar 2018 09:59:38 -0400 Subject: [PATCH] Document WebFlux concurrency model Issue: SPR-16538 --- .../images/spring-mvc-and-webflux-venn.png | Bin 0 -> 104380 bytes src/docs/asciidoc/web/webflux.adoc | 159 +++++++++++++----- 2 files changed, 118 insertions(+), 41 deletions(-) create mode 100644 src/docs/asciidoc/images/spring-mvc-and-webflux-venn.png diff --git a/src/docs/asciidoc/images/spring-mvc-and-webflux-venn.png b/src/docs/asciidoc/images/spring-mvc-and-webflux-venn.png new file mode 100644 index 0000000000000000000000000000000000000000..6e0eeab744d4fc06d5315072a9da91815a79cef0 GIT binary patch literal 104380 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%0D>fHS=#@hC z$ja|#`vLB_^Lk0QOcb-{GAZ9&sb8M$7Rea|f>=Qa-n+9RF~#L@#WH1d>;;xjBdKnA zdqt#6vh%FAU>i2$i~&NDf=^(sa|ryiV#5aM+KP#8552}f7nI}|mNfo7P2Kv#l4V!k)LVjca`DY5PtEl0-BIak8CQ2^V|RxffXW@~_XBSa z=*YCTSW)4pl?4E@H@=O>$slx!3KF?}N#1x3s&}s|z}*tz7%51RtfKE{&HzvckG^Bf zsBSnCi9{>_(Bd+$y636cpZ#}nRWrVR4q!3L0g$BCIjb_pv)g0=6lQc8_GQV)bPOA!vWGzsjHl;na9% zLu&+Toi02e*g_A5k5E%AtLASyAOv%QdRo+^~74I7O%{fgpAQ0PoMM z889Lz_E&C>;yPv0DaBbDG|!64C9+(zbK?VVEZZCAPDRpWNs|dS!f!3!RIS^J(>*fB z+dwNKMZyZfibNENC0 zmB5al*8TpwDo`LbDXDFuR(IyI=1q9$iUC;~uFBtk^Gjd$> z{dVPj?=1PpyYv4vdmqRW#u!CvXDr_ILt*e(37Ie<<$HGA{MynjeyS;wrbwDBNoMf5 z8Jo%xBjCJfKqj_MzzapfcyjiUx6Nz}Gi zY}*^K52Uf&v}M=KwZ#@XcO(|)JTBg8S=2P`=D!=lL>heM11^A%AHDhOZM7bkQ&ALI zR#a6(;rzcn_IyDo8sFuDJ0^BCqNiRSZYbHmxPDRsfxM6J`Pav*C5Ka0Raur5Rdc%J zr60Zg)tUlD#x`@c&rJYkRP0(CwiJR8=NtgZiUaY0KS+;~G6(<=Sh^)ElA@}LggF34 z=H_Kz&irDrE<14JE@B8r3#UDL_ov@)(^OT}9Ga$SPEY05FQPnNu{kIZ#7Y1VR8|sHRg#e8jQPc-<|r{j&^BIOl^@KBQ_u9F0HHWkd)I4A zzp5geDyuH;-@a3l77a&MuHW^|?n=AbxZsK*1CwOivg<1ph?f0v+9G7vc|mZ?w#%ym z`$}tfR0JWy296o>kLw1sb;8k35=64g_y6$&qyG8ajM){{{`I>niVYix=f11@XUMi; z0|3~Rb?DLK)BEtRr+vR_+wKQms_4}rV`#^;ET2j^E3d9zxjBDTUR5~4MqM)I|GT_@UIBk^T1njUSrU&=U@+5_@yz${)5wZ>+4EFraO>B$sVOR&L0fyS>5= zo0m+!=!!Hr5X0V7k#2tbQ(?rQ?!<&kx+GSIj7Ggf9IEfS?y28@SFn0V(WVN0NUAeZ zyz!R5FDNFCyM8g@i7}b>x#CoU35rW_M#84-Yk{m^XyEwkZ@O^Sf97wTdgFylufFBH zA-&?9s621O*I!Pb_uWri?)>=k&u8MOZpR=?fUQT{kH7Dsd%pkuD+^zmI(f(H8^)eD zEF(THQnPRQ+>bw-F~{%wU;7_d^u*S=}$W(0sue(GP407fAg~0vu5{B z2o**WFTG?WwIRK20s!B>ZvM>AMs?Bl@2TlL`PxBt!~g(Eb6;@r71RIs(?1{lRka^= z8$WVj=M2tl0OXXy?>+mcC#QWOXLO(Xk58{3+x9>wKM^Q{lAtv(Sw$kZs6Y@SOoNsd z1_m~R`Kq}D762r-6pPU~noa5;BV_4*hN9JYcUO(kGGroNDZ(qGF5rP@DDP=&~zB+Se4=rRE zEOEduXT0>�TDa_2KK@eOi+UVblzT^lSe*V|--Fx5bAqYnf>1CFiF+{_4Kk-A~99=xdagU4cntIE^C*J*j@r?g`KNHni5CI^* z)5ureezl{I9ExS;w(0J8(Z4?U?A|->*tFpNKP>!6Q51|gwJp=K)ufJ3KX8X89T3Fa z3QHaD9+&#Wx20R3`M)bMw;j2c47*@tqOH3oJvsc&nalV8_?J5_!Q77TbpD7-ze^(q zB22`q%5AYjI+ zI8l>C?kj;HR#cXUb8-{hUbQ(cE;V1d`)7Lox3%ixF7ao0{W3mg9V$E6(eCWoK`|WVqfWl$eq-<@_FIy(n|eL6b>Ryl+sqoN?U}&9E7^8~AN7 zDkW!KIZkTy93fefJGRffVRQ#~)C|!^d_E+H`!Bz_>E?-f?=9W4vpO8qZHB<5X*p>r zw_Vt~M}kxvsgp!JfF1w1b&Pk;=66;Uc@+gUI+ZepliRI%^OtXav3mZ#8ozD>Ch=a+ z#UuON*gLU0R4;)QH9XRG001BWNklAwp9cIK93O(6)*C9e`mB2K3qtTo~iPt2d~ zn6e7Mm)ZG>U))k6chruG;N#5HwFf@fI`*13-}-cJVRgW=K=Z_P=y$=rci$2xG4o&v z5NF8SZql_kpsqvYBibcFz&_{Py?RN;qsW1i*|)w;SJH-ev5+Ui+l5GQf};pV{G>yM8~h zm*=ILo0G!HS;+^p`PoJ=^^*Djd;OumeOMCFiJCBK^8L+;+$bo6(y%=?!zprK2?ViQu5vSKXSYvirt70-4JKcA7!qoL3-#vBevcDkI*j7D`G5Ro;fL&4E- z0Lwr$zu2NjM-LKNQwWVj45B(6G73i`bva3}>`*X`L=9PWI}{oU=?4>#A%_xu<-tk+ z_-I+jUwpXWjqAeI!9#^~#d*JbcFHYJF8TM8ofA4E^F*4vLeS<4!zH0UiK-A-0zpiu z^S+9P?S4bsoRtELGXC*~ijnPn5fupYtO@bq zr|o$W*8Rm(9+{5A$}9bOxgb z3$3bn**m|#YwBwkKKboS|94(A6m5D1V*~+{{Ztm6nBxY4KoFyO)Hd0swZ-R8=qxqc z*&C?22jZ<|ksXzhVcA}>@M;m!g2Vf_|0~b?(6|hC##@AJOJBOBpmXPTnT~Vw@JfWB zvMg-b)ElR9(f&^mW>n7qX2rnK7o~WVGrTEdNmXUSt-ve4x$L=*mUp`Ay+uz=3K@qr zA;zR;&*E>lNs}fHKZyiZYs#X7k{xj}5^YEzhzUf(o7Wb1@1L3248emfC$MbBzuH>W zK2b|@%HpNAOvCX?%&)VvAk+vURU)=c>A8EV5@W1jUu|5xLu#=D3eTbCf~qQ(VVvQI zZb^!^Zu-ep%SL{-EN3Is74 zT2M`8q_!$DaAe!&9UPi{^ucIg8_%|~NTO2~14K(e?ErK81NWv{>8U(@KfYshDYm)G7 z7YJgccre<%tvoZ^r>LYQZr5TDHojwgb<_?SR7fmAYs0o#dK)jL+|+F$u>?&}SEx#7 zWnr^hydvVS1%lYf9fFDr{F)|b=O(n!9b5A8`nU0HED4K6yr31rIV7dH0)Ac0mV%$f zVti+fF+9}?Vz3klVgW+PGFU}vxNozi6+O)YD<@8MDx}D7h?gyBg*cqD=8!`H(f$QL zLzPZ5oy03+;e90##7JO4-u8+vz0z+ZPo8c-AnpBJ$f>udlvdcCZ6&*lu zY$)etAuG!z3tPWH5GyK5!>U70%k;G5Orq?u0Kwsb5rA>nRH+Y1bxvQZ)vq=si4;603MZ`=1~QqNJZHTUvJzU zfzBx&@^iBRmgQZmSO5L{LOIdf#-lc0u{=Ed*4G>7ZY@@mQ?s4uID;>v^t&H6t*Jzv z(%fg7ib23j3X5Kwx9KNc9-QG8Q^-Nl36e}IOG9pN^E4qWyF*)Fdik{_OBUN{13M(i zje7QI9$4aAnA?4jM+Ncb8y|%+?DdX^n!WnPSwF6+rpmFcWe7=y`!?P9_pk5!_nc)#`k5A;hJcq8 z6uj`s(pT1$i}W0a-!BKZM{)bq%FD>;C(X zH(z>Y#@t1ws>HAy2qC>D|Kr!6{m*kRlm{W!QIm*T!SdpwnqcJY*4YSZbXpR$hNX)` zoqxVbaZ9ht+gGuxARIJ~*=Z26YAY*t?5!#DpL~@fgm7a{!pHhtaAvg>*s-N7w@Z?& zkki?_Pj4-_6*8`K{Hpw*%}#ef6~fTuEkX`JBnec~0$YTdA`wNB(D7FP9JoVsb<6Ul zW+W%7XQGEJ##mJ(O%lV>5m3rgGrXEp3DoM%qOlNBRSj#JjE~(aI1p6>z_Ki(SkLeX z6GhcPb07pUwqIeba_2|aoQ_ZLupwr)LR1iH<)Rhc8xornty-_JKERkMuuXzPZuoZN)uG|y@7;HSMVvV3Zv4EM(35IO780-ZU-A*V?hxgS1y?N<+8&@Dj` z>)^9VW7#Yz#YJtVM=ensCo%(K+YAM3Q7#lA1X8 z9QuA!ZNdM~-dTpnbzFV?%v@fUcEv22Wo8V6?J#rGCT#<4peem=(*_%88)(B#(uUeJ z3=Y`g*pBU(*_JJfVWnlbyBBBP4@w+U5>sNyn%}b@^296Y-gEDq`JXvw&LGTl90x!F zXip=(Z+v5Ve!s}`LhnrKbfnFEi7R#TEGXKSz?K3aPUKr(etgjfEs~6PSKkL11S14S zB9ZD0rIW^vz5`*ZN8_oEZdJ7qYZTloiFB)mX;%#n^oEP!d&NayG_}I>aYH=MB}j+5 zMu)>l*R*Y|U5n~EVkW98EuJtSzbr@L;M;v5LI{W*Nu=r;x>mM@QWjrTl0T*@zrycy z2*}=b`a~S2>2#(!7+tw7*pjqzyq@ucO9mCVyfXjIb1lZ$%%&PbI>jiE>&cZlV%u$@ zxPioqf}Vg20X3R}X@XE;UXBx4-Ld3~4K3?KDaGv_Kd7{})aMoPj+cZGLe%bxrZzRU zuV_sWER7#hKBCl@@8Mh9Vi^M79B;k@f3pU_7-ceAb6arn)~>FsT~l5%en5U@uJm>J zFN~3v(b~ErOY1tC+ftj_azcD@%5Ln@is)*V{0xg)3&kJmSLNXg(lXRbp8+8gIGSr)vxN-C~1_=;#E9c+&PfFAE^+_srR$Qvm2dmTMLi!nB}RH&_K!c`OI-ARLF_# znR|rYobmSjb^rQg{Rb=C07URepk{zbqo&nfHG9IDwK=-=H4>2H^+f3IXWo6}y|&`< zBOmz5QIixt6^ozue~-4hhAzDCj4A;E!j{%~+HYTpaMIm3oS$61_-}JJ>sSD4L)HRC zIr6CSw_G%3s1r;A0DyUpS7VRAyYlf5H#D`TK#@U25YOg~8u{q2#y@`J|K_IcA6)m7 zhmP_j^sjXj7(v~}x_e(=HfMDQXcTf3P#1u|;K!#;nBk(kElyFy30pR8d|=LsR~9ux zjxXRA)nqCgF$Yf@dDYC(XN)Z5dKz(JErNUsz1(S-HURJ#Rau(AUR^Gn=ZCY6qLr%T7yUVhxD3&xeX#9kMA zQc8Wf4lQFQqFJB+5EnaR4(b;^an5Cbwr4)D{x|*`Z@%;O`Rl&=XQANS-#vWSbtjrx zdwaN_3T}DkA2&b#)ST@F=l1|iKl^7FoH7;j;;zq~cSN_o_t@X>`S;5oQ-IvOd@CJF z-bK9wr(br(HJ6-wvWv4Rr4(@i+;ZB96V_+o>PJ5s(e>)BxBjEkhAC&?*gogudtdvk zXE1Dd;g*wLxCH<%y5+6ges-*>83=Kq`UOuuc;B-xzPDqaJuz?O1wXpts-K>pEAxO* zqIvmM=bg4CEIzil^Mp#_%OmI!&9vWk#YuBlG#~kk7oWZHv~2c^US+(1-}~pUetrLI zxuY)o^USySR$!w9(wnGbx|U@fBTzR$5ePYL?gk@o1RdHu6L&fOeI=wpvR>JKLl^a_aB_JRdVZ+maum76;} zcU^W|fb1S5BZQC^`{NUHpIsd)oIK(68;&iPsYNKp*z0wMoja@mBJB4%q87UQ$u~Gp z?%#iZ;Q+75VY*@IitFE~|8(h^hYS6GJ$)EQOaKsc^{+21xc{?eBTJ4wd-nB5mO2pC zH1+wnmRx$!uCYKl|Prg?NL$_dOaHn2`i`i4&55Vh0pn5F?80~|NQA?pDtOuHJJS8RmY792mmP7*>T5z=Fe}+o_p;@*N^sb zfGo@E?CQGZUmxD~Iz3@TiCg4)p_ikS7L<5`ZOL@XaJi*JyU@mqvKJt;<{u}X(d-#} z>C#rl+6e=+^U5xe9$c+Oh?>g%7rumBA> z?#DAmfzBFhe`hXBz#CV0d3|zORZcIus$ONInS*m*Skv7e*9zQ+py3`yv@4=teBrr| zo?f0z7(Lo%WYviS0?tdGUbW^#pMKk%`Q4$vzr0}76*B@H1qAim+8+3{E~3$ME;{R}bE@Jgqvv+VU3yZk zdr^4Ms8jOoxVZ-@XY1)(AAbGW78fB*onVQcG4D_aa3U-FZ)9-mbjNt+Y^ATaf}7018%$(65f zM(`~uQc=M#KmX3=kXRc5(-(H?Mbm%s+KUecNY(}flnxv7=!^+tPC4bujsLy&#v_ls z>x^nDmduem)ERcWcDWpc0~jJ)FLkKTA_>3^0@I$^l5 z^B6KC;igra)8WjhpHGp1ux%{g-P%>KEyZ(q__*TUbz!~DQnLo<)<<;RIs}f#w#d+l zBmaC%VJvQJUpX=@GG)euOUC3QxB0|>m!_pXZ45>z8|-*uWt)~IXI^r~Plvm-FXkAq zO;dN5KlbCPPO#TCwXbVW^k{`un>KA~OI3`X^uU=_v82BJH)bt#!C6QCYPct^)7{=7 zj7;?}kG=BP^7zonW9Hs)bU@b(`Ym2wlEuqsPV{1XyDQgqd;EwBOl(~vrbT*G*~aFk z#&EWH$mqLHC<}k7_5f&FN0*#C={Wh@LgqikxY*;xDwgHuBNHB$x-7XZ4qwFA!qaBf%d{@*?UAYOR)eW%v? zGWvF1M6@(H`HI`dReQgDgcJ+T$cFzszp$fZ?5s=AKGhp7v1#q`A5{~+Lxn(0{OD!g>DCc6CI)V@4si2E>%qV>tAolqq^NAgAlSZ zab?7hZoT6d3c%}k|Dn@VOr1aOtP^q_Ql|d(x9gG215ltuTk_l!+|;x0yX$u(6M652 zxuz@w00O#o-6w0?A@{sL9<69P+5gulW!m*IeM*7CN^%YmD{Bw_`ERD4SSq66`&ZxI z5&`b(N_Y_`>P@d+a#K^xHT;Tee(>yVlP^57e9XupXP$M&)AyhE%M#Ne}CUA4=z{7 zP8;*+kERs})TDd2Gm7q7*e!D$#yy*HzL=ug>RUlaCmlc9W$t`Elp27u!lAD|k#MLx=q?#CxDZx9`c%~A z#9zHG*zHzK-P~n?Z4d7uZ+-m90st5}deV?$ueEdOGT7R{5l0Rvabz1;G_*xITQ`TE zao&g=Lydm;!dzQc01HOT2hS}hryMazto`xq3Rw5qD_gq=LO@Ao`Ma-ZApi0wlTr!e z0CxLAbKDpckQCMv?jSg9Y7=Sfb=Q_u=0U7(?k!KHEcuH)rn>}y9Mr%1UTY{D7(Mm4 zt7me0*31~TVOp7tp3uvGdc*8X289)w_qIOj*Dc@|-U`a4<~u}ND~ zd{Aw{q3tQU=VjAgXs;1P&XjI9#kE0x#r%FVg?m(Wl#+sgSHV~_&9rKQZx7!{rZX|a z_6*I-vCBt)7XSbt07*naRLL%Bb_6ubyJr*&uQqDUS)Br+RBhm+nx-IX*A6C%37|=~&4o$z>z>6AZCUnOTjGRb2h4x{r4$6l*ABzj zd;BTKzVqnfbsM)-OsXc~jc=}m*L>q0Zz~E+<(%70T*2sc2cRnX4=vFmnl6c{?nUs=%p`TVx7vn%|fO(;-|%%;^(FUjUlI_BaLcG?7{sJ{aw ziC^`3+kjzt`9-c?czJy9wAz$P&vPrgJQAPp;(Np9R)l&|Pw;ikmMH}a@U<-_C~zDA zf-h$u<#VZ>YoORq?Cl8W(f8TEkMdjY+`e-tib$g}#n~W)?g5nS`Cbk_8M-VOm zuy=p6c~fl-+W=VLz5Kq9i=N72w3jb4P@5nC;6&N&^}-&;w%41JlQjqNnQ!TE^|gP1 z5CHUbJ=_pN2qOS$0|fxv%#@C~e2Dv@*7~(g%^jr!q`C7xa1NL>WatoTlW8+gg9krY zwQ9|*2?LtfEZwNW)Txs_%6@iLzzDX)b=@GxmN|8{nsE>V5`&an{__)-uYGq;OT(O( z>!uDIKBaosl`b=-2IIhqEpI&j^a7sPyLu2?%jmK@)7D|yWS@HLI1~o~0D{6I zFRbnUyfOQOVwYxqRoK;|gTB?@ST?FG5W%M5SUPT?ys!B?+bzOlIp7r_VVyVYhZIRMSUwcbj%UY7c?}wU3wxyK~AE$6{$F-IfA4e`9E5dH~ zjXA4%!;)wgI3Z9o*kf7QeJS21Hq9x?kpW_{cp|Bxe1(3~gD0lR*9>&Qio~dy*ZlA4 z>lJg)YsLs5+8sBsu&)x!##~WB0l?~5SC?*>yR$b+W(XO^n)})7?ebk^zAJtOc;m6J{fR7h1`|Xd;*Q-IFo!|Q zhQ3YV8aj-gQq5)cO|6}4+A_Nq5A{@;?-=n3{1MfDFzrPfw$;bY?xeocC!xnPc2qUO zX@l-CLsLpEd*?b_|?X1go=9v)Kwgs~#>2qDWfV`)8WbH(|2KR9*99kXgc zO}^5Qmix|u(|HB1bW*p?{Tl+7YFD3k&JX}|!;+U**LCCFP9&6N{?j?Hb;MJ==$<%j z6t(uT4%aqt<-{X%!ED($fAtnY*eUZx0XRU)vax-p1d=H9h1(u#E-H76bq%ZFFK~<{g0ZnEg!zP28zav9W!#54y$`f z${_VoV^Y3M*@1)KQ9J^<$KLw0q5>hcH0O#FGEh3y7{xlO;KNEWzmodgxE7b z`06SYOcR?99aY$yud`PtOLAncw!pEbL;ap?!Q)NKH{G`;RqB(to@^HaMHW^r`uvGi z-FCu0>-5Qf+t@?&L#ey4`0{auoM=7yuXo$8V8>3#)m-#y1+e(LxEexBH-kykbF z9~X}=py|8+{q|jp6CNjjFkV&|UQwxq(EbcnBdJfm;{L%dNH%@`hhN_q#%{k` z;W&g4<^<7`>uFv1_)YgbrWzz~(9D_REBCSg90IVDR@Du+o&%8j_btEqpwaL;g)d%Z zPW1WR3tql=T|@j!jf{wq&Y$$tlZUz^n?Anlp=Vq^w}8Jwc6!yO`JXLWL-xuqA>arA zm|5TvMhNpfZ|m8j6R!FBa6Vc8=}o`CH>?u++O^m^&G7jC)vo)o|-zq+YFHhQ84 zYUqW>UOJA0_y7BsJDysr6ihw$m{Lu%01!oJ=#2AAh4r^wbJfB$)DE9CY;XbW`*J!3 zXi6F*az&4T*-ZOg1;@52RZl$b*B9j!N|AT|^U42Ka>91sNU`AZR~2!R*!J0Li5RZFFGRik@1L+<7eZQU#!d)YCZW^^w4NCmR)(HApV&Kq}hUYV0=>VuA&HX_~W z;bV(&@7@;P+pAHA<~uwR-yGAv7c(M{MDDxy$x(k@xGAcJlWHiDed*2jPJVPnIAc`K zI_36}T*9DxTtn6@bmqCooLufqM?#m~^YX(>+q)8KD50)jy>7<;z4=ayDmy(tKj-KQ ziT3Q=8#1WkCzGp0Fduv3#iJisvL%uYC)Ms)@`?Yw`^%R<|HBaL4V}JUu*E+2oM*=0b=^HTj zw_|W7`|Q77IrWLvoe3?OF;c1?OQ!$*+{;t1eg5Ykw(K&OVZ_yKSaZznuYcT{2q)A? zI>U7Mjfg(c^Yua-DKK;HS_)0-c8xBCCynctpHsfMassf@mMQ{ByPZ-KnP zMOE%B=`#+GQcxVCKi~?sCD6XtBvGQHz}S2L`b!MZyzq(1g*m^t`{_+}t(~3Cn-;(O z$BU1ee(KNaf?2@Te|q}q0;KM%VGu$@OO&4U=ntlP?C9zrPp$pOo6D2YP&nM(y7}Xu zOewhT-gl_DV+=qHlz00>_vZ^_$&=TQJK@^(9g$Qrsiu;#aMwrA{@>A)kN?@9A4{tG zURcKF-T4lH_3uBwys@>rqj}TDjRa6em9Bba{&+WRn)jFKN1U^4OM5ij9f^dOJo(#k zQ!lBDTIFZnb>~^bbaQ)EjD;P;PP=%px^ekt)gChY%o@?|Dg2|977rLRd}PJ)_dYfR zSM4!pmkIj5zB(8|Ysyp*Dt7X0p8bwB7A-mEgyF}G;jozuMq!8DuM~>|ju<04{w@1?aNfy3oK={r0{hZ2%82F;l8 z+kx<#|1CY{!-e3HLCb=Hajxsg@uMF3(SWG>MfU^*U|SX#_E)`wDKR+DBfmba;NKs; zw65!Sw?Fqgmx3`R=`6V2)zwwEUUuARl@QN-F)XuGy85Eyy{=F1`mkaC+>ef!Hy^tt zqGrJ2@+wPjyy)23g+wy}fa->Ao5P)ZHc z(k*+(9e2868{8iH8&gVb!!maGvT6xGy5Lx!*LCOnTbiR?f4b*Ipa^+AlSYkx`1&z- zT=xQeYl8zyOUkPsxopafFRxl(xAvr;uL7?FG!2kA^~j08AB2AP@B)3utFyF%QOCS` zjdIIt>pz||clKBtr@y_E)1o3xQpSt|TH_!XU)^2Ee?v9^4cgI)%DmZh8PMZ0fJ0Cc< zG?mDHRpLf%%K*@KZoAO)<`c^_0Q8>zwiEy%LF9h+mzQI|`_=mk*53KUBkuh2%jKhv zy!FA$-u&D3%NupNJ=aTg$M8#DdX4+j&37(d^x$a|9`yK&oIDA4b(sK_qfhwJl|OVT z+k1LYL)WNbTV%JuhUy;QF*AnB^ES=DaQYAc7;^NL|9R#fH?joh$a`M=-|aWu{K?Xn z&pYzvFI+N!;4VID<|Vh@{?nZk@CXnZJndrF(|=3@%$|9IZ5i85FZnBn4IVIeMKdSm zpFDe%q3>G?mBY}OFvDr_G|l1rq5Y_6T#&^TC$cTlCs zm+t^9$W9K+Qe^Hs9j9MHI~s|9P;M?qDFCrie#PYD2fy^+hPn5)=(?VJ(wW1nh>>KE z<=}}c1g1eYt`3fzQ0jDvec*y=Ul{i(-JY{CIxJr)aEsr`VNM8TBH{lmYtAbzI&EaB z84JC*XzSXJM3x|**E4=tNr>|aCFW3`gt3I zE%CHQaIV)gyr$&TaTPfn(QLYN$_ptX7i@2Tdqwl6u2fVt9d75q(t_C&s%w0rVG%&c zNixrUS|7L3gbBk&`|$Pz4&nq^ZTtI29X3KEhu2Ik_n6u2+lx2G1>f0ItKAp?A!?;w z{lHaJbM3L)i?|frLQ(Z?gVNt)=Gj?Rn`QwT@8(ZhBYM06@ zFBu-#vGs-|aPdg!-4)I2+v1%W9dmq<-#4PV=!8)fKFj)VM`8AUTNjZ;q-h1n{6>I9cA`#%71*KJErp`X@xbeJ}*)2{(YN+w!_umR>%E=f1tU%JX z|2xN_mQ|mAx?&yYt~vYclX%#Nmxn_T%-C&74m;Jy!o~~}A@SIC8z5PO=XT6Fd!Od;?=OZ8e>x1r=sF+`pKd1m( zMr>qSUauVuS6*||xj&muIWhV1bI;uH zOgdwUIeshDUVZJ~&bfAi-7`jzKx3c(>)7ALI2V92^XW%MkMLR++tYB+AU3Vv9IhVZ zFDmo)jW?F|k%1r2S|4wV*A_Tj68GImEG!9_*u=02!dSpm(=Cev&+{^m%-viv=6MN& zY1z9ks_{Grwyl{q0VD{V#39T6+CDxQV;+NUSf)ie0m}kU2-z;>C?H9|7{IjbU0plE zvVZ}oWf6-|KuF>_1XTY@Kp;uL2*9v*UBp5dOFX887++pJ1&}4)GAsf};CfDyr#7J$ z#rfIB0l%EvZqYyf{-@Vfqx84+O~4onm}Yd#rXUEsgppwrjIqdLY7>38o%uZ$FilIh zDMCmTcoBoKqglTcSRpFif7cb~`wbHzL$?exCn~^Z|GUWv^ZXrWyv-T0$3CUjKI+KU0*`P38G*bSzR|M!h$HvB4?WB zjzfh4k|Yr$unc35tJfUQQ_Ii{ixa;1@m;RRG&I970dbCv(~qkhm`^ESWOOW8ukX(r4gt7 z^p#&ohQ=QKL45pMHguJg`ziQ!J65yRTKE2}2O@dtT_CL-UOszxE;9zHgbzZKX>91X7Fvd;W!Y-#IJ6Wg7UX5wf z^GLVT6?#-?;E~`5W+oSBv4|1LmOMnaR?(yY_fA~_Qn6Vcl%jtulVED zbN|yg@!3~SKH8(3?BO4*6%f?4EvhJD?U=$oblJEMU2B<78dL0E*`9{|>_N!*TC$Pw zJ#V~!>>uBHVSO-^)H1rI8D=bzet-U|n?9`5H2b)jV~2B;xr;*!A*8&@pH}sB%3zJ5 zd+SU97J>C)t;WOqC60}lgAYC6uTe^E+qNv*vcCC{0Aky=X_4JlzQ6eYyX35S$!eLu z^yNBn^hwjExebFo{DY;aQDa@0=WyRrSI{Sl+;?PXfg@v*#m%WH6>h|Ow;e>GEjvyh zQ@!E6x?kMg+*6jP#VhEA}>9y!pm%AC%& zL{>E&PJyjs^)_{76Ijue9qbhbctn%1$J0*+C8dC9rgPz)&qc-jNf%CcAT~W6tTBZe z>LN~$Tsyk3?_E6YgC2TShuRX&PAGG;H~1jF#F*IInmRt(*s;2)t1+xv93SwyhgB8M z7*;m1I-nqO$m*96cA3$Cyw{KhZsxJ$YGsQpq*)f}XoNAt9P-wJ6q`%2Dk;A zJ(vEXu1NETZ!CY|b1j|d+R`Rhjydb$KNJ*5%rFNI$Kl4U5yc@49aV_>VBV@v3M@k5 z(}skAp(>vq|f#m>C-C!g+-*j%Ufj-tt7Y#&rkABXUJ% zjeZ2N*Zt$>_n+RtDOfHWbNb_dD#;-h)7J;X=XZCclL>9|QB{5Q7HHp`vNVg#t&0}9 z#flu+X6x{be(8M-!|rH~yM3~(u$uQn9cm+JO<76Jnv$=u^0@wnrKXaxq~HwX4-A;m z6zj}zP(uA+doq>KryO0?hwp;+S;wqf_%>64O|R z4j#kSn32@%>4gpfv*MfnHxe;M7y~85ve^!-gJDn9TpvXUjhs-z^SBS+2<^*W*|5pH z&2g86hvqwMHoY+VC8l9_wkBL&Np|p*h0fohcFli1m;k~ z=CIqV3?7k>4x`0jeAwKHOXSWPp4S}HBN>(@Vf5FDpT}iYImv{src9Qz`mUlKZh_NHiwN38KHtR9QeKcSR{f@wW#`3oFu5F9uhLXAlyk};1c zatiDyUk2lV)D!}&%JW4Egs_Pn}SsZT8R zNNjFl^iMEG(U6*mXMKK$AYi7l_Cs1xfcCW2t(wyd6$v9|LI&eNNXE6MtYq?D>reL}6U1i`8Q>`l&=fD3#En;f&iW$qLWfH|&$T0)X`q9aB0XPnI~= z?~1|Le>e`cwtlw9U}8S&bHQL7P@rPy zR>Rha+arydP};xlz5fKVHlZup(+!dAm=c#y<}J43&*+yBLc?9@Y{ty-E4;{2HV}3R zwGqU0vOb~@bn`=eBBgB6o59#mc!7(C)Q;vvSxs)`fZTp3F8f=iU~4G*X+wN+g~#vU z+04S|uQ4UWBAHNEI~82b&Sv~f#R%bJsqs_G{t?Mz^OK}a>`ZHZTSr7FLS5j(Dx(LePBG7PJ|IiWZN zr%S+G|1HTv0E9wo+H6f4M-@4I61E6?K^TnvbS&A7+1eQ61w3&^WxqB>zs(M0P4an5 zGMcr<7P~}_H4kL;Q&(tNcBEU)sD{t4h!WoqOR^AvMPXe?b8;}sFFSa|TIMkr`v))J z&emjSTe4WD$cSQBky~K)VDwjwg-p|KZ;oS(a{S8SU6Qr^gu$&beM*5+=G`xkO#lEE zxk*GpROC$-T`?H@>pC*3v2}fSaiwqQ$UkD5@TI9SmY6IkEIx?p;FYieAnC(kLcl`KYob)CqzNk?r6AM84alb;K`AB9{0tJp@31+us1~v zg@dsH*})?=pc#z)Koq%1x7yK~bo=DN!wdR)+{FaeA%jrbku=}j5T0J;EpQ1;V=?+I zl+sAI8jEK03Y>lJ>_Q%+_O!V^tWC;ON}N3Fbj4uo=TH*3ZJR=&?(~Fd75;oDOA9iA zb)Y15`}OtV>Rh=pS7vV$qu;`DD4ozdJCZK9=1AKck)kM7uL>&GG6%{;EL%W)mi`4t5+&VO>zI4`%}| zVW3~3%xaAO>TLla9@CQ1EXQL{j)ZV;Ot~QhO$oDGHLKmiK%dximNSFF*e5s+scECR zAu0&MkP!vm9GTgK39Rpmv|%r9PDRqjjB0OBCujzve_~rC7R|(?*}MXmAoilAEChfN z`aGC%aA>q&a`BjrQwC!{z#I+-Qw>|9VLMdT4PA*0`FEX%UHI?{%2xxJFC@P}$FAOyNi>tlv$*yHn* ze1)~SVlehcTG=+~YEMPOYGH|Y@Q8d?&&~waq2cqERBJ-3%8|=`l1Z2$8U0sgCF9vx zIEy%Ndu37NzRzA+2muD@RITQuQK;~>Ig)@`#TA3G&(aEWDBP9qYEQbo%7CGHE|0{_ z!UWc#B$~0_-x}jFno{9rg|v)*>`1`2NII!^cck22*^~1K%eJQ#Iz0l5 zwi%550lE@J?TL|0lWblaM1V$5Ds}s0jM-3P0;_lM-j-M}WsECv`D7m0Ysu)pK`;;k zEe%lw;PWfrbyX~-kTS{Y?rfQppIYe9EW#cEgR$@9h$drtLtVJI!aICyF*67gSiO$6 zgubjbC30wBK=DYt&8*7kzcLFYV%bI0+=dv!;;K9rqQ;mK9lDbb96jcMA^ZdFYixdDgl5N!K^vUmbU3Ef`al`VDhLw%x? z$H3arF&O(c=YuG4t&Q=HmU#7$Kv`9;B(npXnZW8(w8r&!Hb;i$yQ*^~w#${#&tv68 zEE{Z3Dh|P$BcuH-o~0D(6M9R+oKmP%u*26GjQtu!mSJsP+l?@qbX29oDKeWdfz>Cm zY`VB5*_}4ad{T*9#4M4)=&xXmEStnanT)FQ0_Sw~6lU$!c)$p30v)Q=nKu0ruFVzQ zJZG@6#9-|GG>-rfO2xJA&J-n3F(9|7%*)Ke1XiCXlChSxCRLpb%#-t7B4MW(GWxBr z!N}CDL_C{H7?RApJtD^=^7T2xo8MY?D+C4&)WN1c75_VFK&$WLqTr!PfYQ zB4?RbVj%>hU;7=54BcvLiUFWNfpeFTnotO;*2btd#xD=_2+Tt<82bvPkWOiv*LGLb z_-n@$GJ`OIb@-Dp?4@n#WY)@Y@Z~;9;xOx&#ptK52O-R%SU8i6Wf6xIhak(mL1<95 zB3WBRFeV`TBy8AhfG`+)3&&wivr=&_8P_-g4;q%wPP}0PtA7#8S{u4DZ3(?PM=JNp z6o9a&!04|si`XQaHX@Ns*rH*A@*Lb?uaqMqpulqJ48~r9Ib>V3qcsr?sdYV%{ zx5Z9SXE62xjzbhs%eH8DXS%q|TQM-#<(60_I}=z8h-S<=8zU}>A6MeyFk*v((T~Cm z3c5{}G$$TBBpv{wq0F*{%{-3=jVO>=3q%Iv+lYrVb(=zYdCoCY%0-Elu`_|i z*qQag%+_$mEpj;yzQ852V|EyaF&H62X;;eVR;`q74bF3nEOPGhotACUwx&2QV2@As z`V~>+2wUQ1FnXqKgb;#E#*9ZYsf5l8T+JZAzre*T!vq#%&sc=E#`XGeHkvU9=R1l$ zqD?51S&YL>T44m8Nn>*;>k#pvfKu&OL~hT^wuI1VNNsD1hr82-C7!|(55mA?7Neg_ zE6kxx+GuNzrxJQ;rLUyi=kc*xD<-fQdx1@8N77i+nT}_z5rwWok6^JGg>e`-8UPNX zj-;`!GwqW3(M7KE9EsnHjJR#ntg6><42QbYc?GV*Qja8amdVQB8U0RL@jQ-2GOdkq z%d|_Yaw=+aMTtY~EH);v82d_CHQ(JF5qWM>nVaX>7-IBoRD*opnxGWT8sg7$?oVZv zp;>E|wRd%-3QIg?RX&8-%);nLWHV;{#*n7j!^aktSLZN;FoDH5P&RaBHiuNNB)CQF zcM5Kav)N%gj6UI6062`YCJC!%ST$1y8Cu{NUf?*uU#n}@=C#3OLU*}D#VL4m6j5g7 zS&YMR1R;bFWHV+Wrl~32(CwmfZ_VHUvkVhhjDv zq^9+@rg&C0i_5%$B6p5o;W*5U!vq%N;6nkjCRra;>%&>6h==Aoe6nB>Rs_%JT?iPb z4ZALsiDj)SzcjMYWxEs7$~QiqJ*Nl&wNEo-T1J*%3@xTZM7fwg(w9EBN&2`t8;UohxO8R3l86wT@u z9TZTCy^>8RtAl5Jw_XDPA;e(_Ce6BVmPb(OSMr^Ffm`Gc^;raj&{RT8#QG;`YLL21(9P%2Qq=h=FE<^1yYDbGut+YqTx&+&skLN<$1Oni*X3# zRVJ;sHz!gFy`aQhHPFveflOdA`Xnpc(+!bqu0!z1oI}7Ki5ED;dT25BIp9Xfut`d{ zHIu}$c0x0&a^`Iw=PQE7Ka0=M4S$7AUTlo2>3o>%&=}!VL&0IWo^-#5Pwkc6A2; z97eiL!>YM8oY72LTj;1Qa0ndc54#!>+orZny4sVCbz##Y1x4=MJclIlfPjS{jQtoq z97eWHGpZR1CS#$j%O?*UlIP7;cpf8GV#Nd& z6d;l@8>4zsw<>bv!Ffu7OYA4NpHo$hk$tw5mu+wKfnkf1cptrCQ%Kd zStOV;c!Y)*I;#EsH<6+1R>P)HB%F~X-kT$HJQgKhk~xmYK-tO`0AQI!*DOP~ z48xAcG@!Jk+*dImmsyCx1Qr7TAd)d7s+BcKENewFrdQ@FbL3nHZ`#ym3B<#4z#|Ya zq7;H@vn{Tt3_IWydBeq#U8l-p zToaH>JfeURLWnJC9TrhHAcP2|S&M9oWLx8g%;Ql-j)8d&jF5oYS!Z82G-yw$Ryde$ zs0*uU!=L9YEOyHd0dt5_V1wiEA3GQU1wv^elI?6yrjvS3K&c$y_vg9(zr8c9RU)olPO{s<2WJ)fZjG$dGrhm8_5nyw+cyh5i zf4Ve9WthM+ekr2x_p9Oao1u%cuIRM!mBU5gz~l%Kz^dBcE@MU@L{Uve$0S3RKFW2U z#w_c~eR|$}a$4J2`n9;f9sl*k_5IyMjBOj5);mX`V&|Ee5W)Og?~LIbXS0$uO?iqX z#j<~xrarmg&Y!d&eX^}8i=G=Mu#7jrkmN;|?uI<1vX8PGGa;TY{gY)lX^n(zF! zi0J$n`uO!1ci;T;zT|TDVf*35YPqgJVRmbQIktX3s{uGzj*7nczI*=NZuc;5*7e25 zCl?=WTwo?7LbDvh1eWppbJeAglF5Pwbo5<8RL*HzkayB>W4moLa2DL^mXGGt#^(95fK#3Lf)X| z%;|Benxc$-8pqV{(>Np|JULsOKV4c*m0<$Qco%LbS-yLSU*Au6L(Za&r*-8Pfjm>~ zFfblghKOLBzx}k9!ow*7Q7x)5>zHNA(nZsN3%Eb5-a-H( zU?e8U0$nV-F+WV@VJt>)O?gZ&#siESt(O zfn~gB3wMQCKNVF~=#zYTGydadeBMPuJa6538_t$)TYH)duMQsqc<)Nz@%RS;<|Q{G zj9IU{bh(c&y0n`l5L~Ro#isi6x>{C@2#iPs)~V|KH4s$+QB_e9)uK07{nd;8)#bk1 zCFgN{QlD%Wn{Css+#$hH9|Mc}o<|t*F+Prnhr=SUzZ>uF#@+3(-$hkjZK~}D?db=L z?die=Mua(!3av+#VFJtegD&EeT<+rYeZ1~+7Yh-1qT17{;)>BT21d^mm;eA#=gIa* z6XsiT`M&m7DX1y}KoN~aW06!ei%wY{rZOc-s*Jd*_`{`tx~iV8Y>{pJ&_?$0_Nu?R z>bhN=rVOe?6lz!3uBsh7WJlh!^W>NgS={(im*`t%BtI#hj(YJR9902ImXxK;k0LqB z(5Dnj5dpwv;n$n$r+>QG($QWY7O`h5zKT_vm6fd}$HLDn$;(l|^(ev>daHNs4L~RRu&O zgvQe{a2se>uv zI0#Ihsqs`XR*o7^i@=Q|3so3zRCvWH$Ei$X&Z(3lC98<4Xen~c;!+h5Q3X+%^T9=C zYdQ2pMV=KHp<_fsB7DtSLywm7%4Zb-1O$$Uv%wr{_zp??bJZjsV&q7O&XM!Tj;o5D zXXm-9T&Ory&RL?NVFJrAeq)a5S@YaJ3m_1gQ(5MeFHqH@F#D54VD=;({Y)YXStJXH zYA%`u5Y-bAfoEa_$LNWez|-s`L(jx?xYy88n#~*h5dad>%U8e>Ka97+QXb=Nj|xgb z^pGsC^4PNOAe9hc9CMmVj3ve#r;<|skp~L_iD`B(F%vT$$4E>}NS+wcc>;WtQiuS0 zs34xbxv#wS_#cL00?RNA!!QiP_|KRd)-VjiFbu;4mSGr%VHk!9EW W{axHN!6Om?0000>) directly from Spring MVC controller methods. The greater the latency per call, or the interdependency among calls, the more dramatic the benefits. Spring MVC controllers can call other reactive components too. -If you have a large team, keep in mind the steep learning curve in the shift to non-blocking, +* If you have a large team, keep in mind the steep learning curve in the shift to non-blocking, functional, and declarative programming. A practical way to start without a full switch is to use the reactive `WebClient`. Beyond that start small and measure the benefits. -We expect that for a wide range of applications the shift is unnecessary. - -If you are unsure what benefits to look for, start by learning about how non-blocking I/O -works (e.g. concurrency on single-threaded Node.js is not an oxymoron) and its effects. -The tag line is "scale with less hardware" but that effect is not guaranteed, not without -some network I/O that can be slow or unpredictable. This Netflix -https://medium.com/netflix-techblog/zuul-2-the-netflix-journey-to-asynchronous-non-blocking-systems-45947377fb5c[blog post] -is a good resource. +We expect that for a wide range of applications the shift is unnecessary. If you are +unsure what benefits to look for, start by learning about how non-blocking I/O works +(e.g. concurrency on single-threaded Node.js) and its effects. [[webflux-server-choice]] -=== Choosing a server +=== Servers -Spring WebFlux is supported on Netty, Undertow, Tomcat, Jetty, and Servlet 3.1+ containers. -Each server is adapted to a common Reactive Streams API. The Spring WebFlux programming -models are built on that common API. +Spring WebFlux is supported on Tomcat, Jetty, Servlet 3.1+ containers, as well as on +non-Servlet runtimes such as Netty and Undertow. All servers are adapted to a low-level, +<> so that higher level +<> can be supported across servers. -[NOTE] -==== -*Common question: how can Tomcat and Jetty be used in both stacks?* + -Tomcat and Jetty are non-blocking at their core. It's the Servlet API that adds a -blocking facade. Starting in version 3.1 the Servlet API adds a choice for non-blocking I/O. -However its use requires care to avoid other synchronous and blocking parts. For this -reason Spring's reactive web stack has a low-level Servlet adapter to bridge to Reactive -Streams but the Servlet API is otherwise not exposed for direct use. -==== +Spring WebFlux does not have built-in support to start or stop a server. However it is +easy to <> an application from Spring configuration, and +<>, and <> with a few +lines of code. -Spring Boot 2 uses Netty by default with WebFlux because Netty is more widely used in the -async, non-blocking space and also provides both client and server that can share resources. -By comparison Servlet 3.1 non-blocking I/O hasn't seen much use because the bar to use it -is so high. Spring WebFlux opens one practical path to adoption. +Spring Boot has a WebFlux starter that automates these steps. By default the starter uses +Netty but it is easy to switch to Tomcat, Jetty, or Undertow simply by changing your +Maven or Gradle dependencies. Spring Boot defaults to Netty because it is more widely +used in the async, non-blocking space, and provides a client and a server share resources. -The default server choice in Spring Boot is mainly about the out-of-the-box experience. -Applications can still choose any of the other supported servers which are also highly -optimized for performance, fully non-blocking, and adapted to Reactive Streams back -pressure. In Spring Boot it is trivial to make the switch. +Tomcat and Jetty can be used with both Spring MVC and WebFlux. Keep in mind however that +the way they're used is very differently. Spring MVC relies on Servlet blocking I/O and +allows applications to use the Servlet API directly if they need to. Spring WebFlux +relies on Servlet 3.1 non-blocking I/O and uses the Servlet API behind a low-level +adapter and not exposed for direct use. + +For Undertow, Spring WebFlux uses Undertow APIs directly without the Servlet API. @@ -227,6 +233,77 @@ dramatic. +[[webflux-concurrency-model]] +=== Concurrency Model + +Both Spring MVC and Spring WebFlux support annotated controllers, but there is a key +difference in the concurrency model and default assumptions for blocking and threads. + +In Spring MVC, and servlet applications in general, it is assumed that applications _may +block_ the current thread, e.g. for remote calls, and for this reason servlet containers +use a large thread pool, to absorb potential blocking during request handling. + +In Spring WebFlux, and non-blocking servers in general, it is assumed that applications +_will not block_, and therefore non-blocking servers use a small, fixed-size thread pool +(event loop workers) to handle requests. + +[TIP] +==== +To "scale" and "small number of threads" may sound contradictory but to never block the +current thread, and rely on callbacks instead, means you don't need extra threads as +there are no blocking calls to absorb. +==== + +_Invoking a Blocking API_ + +What if you do need to use a blocking library? Both Reactor and RxJava provide the +`publishOn` operator to continue processing on a different thread. That means there is an +easy escape latch. Keep in mind however that blocking APIs are not a good fit for +this concurrency model. + +_Mutable State_ + +In Reactor and RxJava, logic is declared through operators, and at runtime, a reactive +pipeline is formed where data is processed sequentially, in distinct stages. A key benefit +of that is that it frees applications from having to protect mutable state because +application code within that pipeline is never invoked concurrently. + +_Threading Model_ + +What threads should you expect to see on a server running with Spring WebFlux? + +* On a "vanilla" Spring WebFlux server (e.g. no data access, nor other optional +dependencies), you can expect one thread for the server, and several others for request +processing (typically as many as the number of CPU cores). Servlet containers, however, +may start with more threads (e.g. 10 on Tomcat), in support of both servlet, blocking I/O +and servlet 3.1, non-blocking I/O usage. + +* The reactive `WebClient` operates in event loop style. So you'll see a small, fixed +number of processing threads related to that, e.g. "reactor-http-nio-" with the Reactor +Netty connector. However if Reactor Netty is used for both client and server, the two +will share event loop resources by default. + +* Reactor and RxJava provide thread pool abstractions, called Schedulers, to use with the +`publishOn` operator that is used to switch processing to a different thread pool. +The schedulers have names that suggest a specific concurrency strategy, e.g. "parallel" +for CPU-bound work with a limited number of threads, or "elastic" for I/O-bound work with +a large number of threads. If you see such threads it means some code is using a +specific thread pool `Scheduler` strategy. + +* Data access libraries and other 3rd party dependencies may also create and use threads +of their own. + +_Configuring_ + +The Spring Framework does not provide support for starting and stopping +<>. To configure the threading model for a server, you'll +need to use server-specific config APIs, or if using Spring Boot, check the Spring +Boot configuration options for each server. The WebClient +<> directly. For all other +libraries, refer to their respective documentation. + + + [[webflux-reactive-spring-web]] == Reactive Spring Web