From 247f49350ea3631f4cb3af3cee9afbe0226a2a01 Mon Sep 17 00:00:00 2001 From: Soby Chacko Date: Thu, 11 Aug 2016 12:11:18 -0400 Subject: [PATCH] Extract RabbitMQ and Kafka binder documentation Fixes #629 --- .../src/main/asciidoc/images/kafka-binder.png | Bin 9469 -> 0 bytes .../main/asciidoc/images/rabbit-binder.png | Bin 12440 -> 0 bytes .../spring-cloud-stream-overview.adoc | 309 +----------------- 3 files changed, 3 insertions(+), 306 deletions(-) delete mode 100755 spring-cloud-stream-docs/src/main/asciidoc/images/kafka-binder.png delete mode 100755 spring-cloud-stream-docs/src/main/asciidoc/images/rabbit-binder.png diff --git a/spring-cloud-stream-docs/src/main/asciidoc/images/kafka-binder.png b/spring-cloud-stream-docs/src/main/asciidoc/images/kafka-binder.png deleted file mode 100755 index 7c6c4c02018322ef83787be5c91852b13f96d412..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9469 zcmY*fcRbtO_qSSFE!Cw|sVc3VTCsxC(o(Bdt)NzGSBxfhQBMbol2}o-SJkRUVn0PC z_9`)p*fU~}-zWM!-|zSLPhNR_?l|Y3d(OG<^S<|uo{q-Z)10SiXlTwpd~okE4Gk?B z_}|BL68Ke%YDwgECM&W5?C z!VnUB+LMjp-kP3L?yDzvvtD(x&i(xTAd)?^$g8hk%T-I<`>m> zn)`=vIT!@_hN{^y_n~qB%E0Dw`MfbWh>XAL~r6c~+$^ z$Xox737jsgy#hZ#NY9Z{o%*vwoklHnpAO&D!Y2CQ>76zj6l&%boJbL-mdx$nhtc9^ zJCE+eDo8(*AQo?#czdPdokpiOcMpZ`N{dQv;p+!RGa1Lcb!&=bxZsSF#%1LtClrD* z)kVJ_kQbNlAA#x)zjQfw%&gyIO5YY*-QDkau)6rsYBg)4ihU`NrEc7ZvQA%|8v}OP zmy*ty)G#CBKJDCjUSRQsiPz91(XG*y1wwkrDfTZEItnNch>o=mRI<-@6kO^bJ9D)_D9XU5abJs z^?5Kdqq~=U`J8x^saH-_1xfpQi0gD;1k}Vt*V3zfHVeOaS{dn`EKJl_Ak%1o`80Bk zqz9KM0i)h^t9W6Sn$uUl7KuLRoy$^4ZC93W$*O!FQMcrs>Iyh$w5qn721~oDCFbLt&qR5^jozH1prtPL z#;$L7O9YO4VZ@`0hfdOXs9tWNh$XLwpWNsu--OolkI8_Jnhx`v+F~@hY-r^{8ltT0 zy&D&5R94T&&&zg&KqV+m;*pBGc47h6ECl_A+aF@Q|K=g!$~V%HOxv=87K+d7;TaK7 zbp{$z9oHbVrhFqPCf(b#I`VpSoNLR-w9iqT^=U$gTq#zFVXD+eo|gMo@&H$$n)kB) zMpn->e58J8xsD6Pmz>|Sv=(S2;msCu?N*Wd(9zZD&Fq%*U$IQ5sLfbGNq*^rS}gLt z%`S%yLU(NSYwR3~CA*LoW*xPdsiNLooyU>j37o*i^Te_K}VFChr(T;&Fr$#`u4unc?fk%WBoj-E1N>i z-`5frelV41g`ESoHs(^fsj)wwitVrzV|SV1b;;xtb}pyM_I*8+t#A1`U&JMCpl&qP z(rx*#eN3+NExh3lZDLEgnvbq zby?h)ob}i`i(%o~Nx3D3L6x5JwDswyW-rI?07JAla9A`0NhWkBKgo30cXJW_DwA<% zuU4e5CXq7;1u0$F5w_?gfeX9$L3UGsbOy?RmpNx+>!?&@EOSl{COyuA7+Tm41mMmI8jgMmKW z-_USF_Q(|$!r9v0&_jy#;dadlAZ(ghd}<1l5iXB6RHGhWjQj|oWz{mEElP* zve^og?_0cuzCuGdi%Rotvac?ON0(~v%A!%*z(Z@P7{1BJOy;Iy*+&WcCclKYi2jD5*TGKgoa@xRIYjM^7a^sqAo z{elJy8BGq*!%&?hlZfwi7N5jCSUZxfAk~#-2UClP4&61ZQCs_HAx)0lxUVI`=_ryH zHRHq5it+oHeG0JGNmA|)8!>Vtp0sH+m+I`;+~QGnrXXUgs?l#TmM5BGCTH2xTkVXc zgSCZ^93U&ll(-AwORoy>Ke5XPLh%w zquLC~*{u6@7NDkQ9XnFmK;+&5X|%n@Y~<&-bF#ID;`OS|*4gDHhBA@ZNxzswH{ZeMOY|7X2r)?!~1eoG5JeV4%K{!rZCaxPZ6a}e=e_A8;zmbfR zg4|UzGe2)#nyF8A%JZx}tXV@$V~rpV&r1etE_0StNn2|6FaVj99(GYTuq{4nD4?{q z(_aU`1w<}aT-V!Fu5VJJOU$&uo`k@$dBge&jyq{d;?Dwg$aM6}`pn}XkOp$_TPfN6-I`@7A z8+`SYcBC>j-CIXdz1=*r7pJVlJxmMiB^}_C^st48he7676B!u+ZI9K#gpRB?0t~~+$GTi%z7KRvY4Vtkqy>by@t}}^l3VW;xAE%S ziVvubT*r=7#0>lC>)!9*Dga*OKIx;UzVKiF8go)m+D+D|bH|}b{5yV3-VSP2EbC-q zx0e&cD9$Iv$8a3ymnl`Z#*AT=kS}kWjD?~*+@V&=-o48lI^0~mf0mRF08*W^iSV-1 zK7<}+zr$cQr`f_w4=cx{j@5S&Mit9$=W|+BXnQXYS{>m`Eq8PEncYnAthlFr2Lv`c zs&Q?t1D)HF^MCiR@r-?~;dA4sAuhH61}EpGq1ZFuW~u92Jj z+j#{7%<^%zK!ppC*+x4kZ)CmAynkj8DI(T62rCD&_vZ>Qvv(W9kjeUYKs3 zzd~e@NhqG2OID|Wy(gZd&egy+kZYRE($p484+}e!m9y)fa5B)lwtb~#scUa9_xRL@ zVq~qDZ*y1tUOi*&#`4( zR}AOd%OSbg!edis67ootoZr>f- zaLRk-&JR@-a6%B}fs4+?)eg=m4SXm7&#Lo>wuB3o9i#MA9|kzLg`Fd$9Spe7MqWd) zb`|VSTiiTP;2%#)*136=aI_ksJWCU4blb$jqLAl8Vh*y|4Y#HqpOln;l$x4aBq1T8 z+F_3Iw9kN%d`G;Ip4bunF)Qenqw-#2k+m3nmE&ry$t_l>gm+9*?ZIFC;HR{t+vzrk z#akWB^%kcmg5gE>Z_Pf}51(-W>eD=Z@USuK;+xa3Id5b_!s}0h5I2mj|7<63Uxo(j z!JRqph^mb;4+%8YpNgMq_@T2ITj<+W;J7*D~{$jHX|xHl+q5~dl$;8umh z-#3=+(>a9Eeq==~M5(Xh2(+Xz(fEy4mU_gZ7G|C%^_wS5tbAKVW&LpYYWnO02T**uZJySjn zrAxc&w__!dzrh?nNTXr9;h2qY z)2PM>RxmT^G4ApL+`(o9K)bdL7Ko*FcR86ZQleHDaj~rraS5BKi|pbS{1CTy6*~af zXtvdB_fWK_BN?Q;nktuXz{m<3zy-lrxR%LNZ~@<;e=xL4q&rl#JA zl`d;H<5GM{2~>krig&&z+*#K1`A)YaPuZ+ays~xJs4Wuhw-tK_p<7culR^*s*n;rd z{rj`7HfjvxIcySu-3!5x6p*C6;e9Dp}X%;zrkRzoTi;9 z({?p`2YTpBJf(%VImlqeo)jO^F-L!b+Oz7#q44a#i&@mp0W?&fIWdCM$gt;Af`w{o)QPzfrc$JW982c zp5;OjGe1kycHV{-=TnQo-6(XPnkBRr)^WI-wETFWi}Pv;4eaA=)n0zehIr+dWUq(f ze-RBn>1t~^tU#^ITVRuFaUpQJqP9SyYh^g1ZX#jN?hdkr8@BEFMF4k=O{-3wCArzW z-RSjnTOa9$C~Umw`>wfjz2Y#P+jBqr_<{_b0O!2$=YV~^PLwHRUGu$JPbU~zL0mHA zW8ZK$_&`t2HaFI}(D~Qc%gIP}h=wPzyG#bG7Nbdi!i+(IkdqAMq$c6@jO)hsIDZzh z!<#H`Rfyc!H`=;WmfYQ(jz`EgW^>b=|B388%cTWO4AvXt#^=={3Cm4eP$WVuy zsP1kS8+`0OpFBL!*$cKl21Ybm)1*L3{sIDb9so2s0c&W1Mw8#CVmCpTA67y>-nPp)*(%&89 zXXf5dT?)lAh=tbK>J>1897xsHN{I?qq2`|wIN%hM$N@RWsS*AowC=t@AQhehNO$0J z?w~sVevi664!11WhJ8<`z`B;aeU|Y25B_!unZH9*(?e4wN6}WXidQih`)dq<;55Kk z-6tpw&DX<7jYk1-={s0gB}(MK*o?d%%1+7P*8IL|_ud=%g}uC>lsUO@!kLig4hJkXDh5g`tF~}I_x+1K z_y*NHAor=>N?ZNxnnpeR^D!k*~yVm(=SA%@ZA(<8=e*0iawlB@VCvQ~_a`CQ6Oewv48O zKtS(51s~DfP|9S)$3l`?&c@HO~AMR?Q8yo)LVHWsu-|Br@rsJ zIkv&yl;Wk;p`KKwBy}}!_?d0d+@mCsV@RFxQi9rTjnWGa*|%LfLGA)5u(XaJ?{75< zDh=$sKXas$B=o0eQ%lOOK;ueK-`(>Y`8BrKxrL`9%3iJop%(r8F&H^6AhW0 zQAU;&ScwgM$G*5ZKz|P#D?lYs0cPRnn&bBVjlKZAsKPht7H&CJ`MGhNS(FrZCD{@q zYo(VCA@kjXIqh6Lg-VAbA2K(0!!bf&1xmxMoE3fN0(HyNC;i=fL;xEBwXw9^A*yjv zn59EcQYIQ;Nj44Zqi7F?TZ{J1myylpbfl48hxv0_J|EsioPA^<%+7i=OI98!(5c3C zxpZXxhj@4e&&+ZZgLuv5X+>Kimb*iFDi@t9UXFc4eT5!Oxm2H5?4Jy*HD4n3UPC$S zFn{km^b?9d=FT#DrCdHer=v!#oD&-=!rXH%)&MzNr96_8wpA#0*GRrhrEOHkjPW~s z5tlmov1htBoo7eBz{z2*Bfv-ZZg=SZfmOo%%xw?aWcU~<|EczJy=}Oc-MMk<+BNonvA{wQUk$EHO>4fMQJ}QwX|X=) ziH@IuW2{sX0OD?EL*>9CMJZ5&iKM|QlE8D9r(5ce(JKTAjn(UGrkr&P?L0_sgl3XS zN5=nS<=j%h{|F4Q7HeFIy270C-9pEkvM~ze&f^p(2db1H*td)v8`$9u76DC2O zwcG@ru}YeMdN^63z;>k7OX>MDu7ZlYLS+FLH7&|fE0CWzVkAW-P^?t zpwW9g|L$i(IEG;23zF8}8bk9Kx;qWcrb9k+?!mJjhn_cTvqmBV_T6$v8j(m!-t zOqLB)Rzz1cHSsJ#x`Qh@k7T$J)banht%TQb;5K8vOY$trIRP?4hS57J!xzxZ^t+_| z#i-}*-TyeWDL1L~YBFwx)rWol(#X%njIFIMAPgTK*zv$Ft?rQir{8bh`0zU>Z?%jW z4FVLN#nvghef68q%klbTD>91p6$fc7orVocP zCLX^;G72{uV z)QiuY$6FLE*Ho9XO+AKybatFvfnxukKcMC-s0%K@5CD8rc_e_|`}2p|8KAL`Cj%&^ zGeBZH=9++f2_%Q(FMmcgZ|pB=^p=}*ce-Dd->edio@;(<{`8vXPE@OqNdZ(%Adgy^ z#|#t?SeZbrM&GS4{-abqhK(B(hz@-5(-k+_Wa7%a#3C?mxiv*JIkVnNX!rKHws7ZJ z3XA8CLQox34V6rz>QslzvL5Ze&aM@00Tus%&JqwIej&N}DN1S50PR#AX~~zv;Ib`@ zR(=NWf))1zA_zE4`@ugBeGcS)7p3tECp~JiKK0*kCs5!^Qxf;YnoosEk`cK;!Jgmo zHO~p4^5^@Lz-rBHLtc7}FK5sPYMlu|$$HU@WZ;_cqP)*UK=Zufx8LIhPQ9;)l&A9W zr9!a)LjX!UZ4Xz7J}zV==o|d*NLiYe?|fmYOVm@}Q?0`lS#z_jx1eE}_P?s1x!9+w zetW?DOZ!vu3VYj{wV3i{++lC7vY3O*K6JL^Swb_XK~Z!FoH_T`gqOv8U&u{ts?Ln# zkgJUL30kso7~DWbjJs^M{T%2-zCgJN55h9ivh+S?*zMqjpl95kiE&zI?Nz}{$$F6^ zncCuKplC+VId5#WV0v?Agxg`uhtKkJ>3Casc$WWI9d0QYdNsnsi@oz6V5j@2h|pmM zC$$sq^-=KMk~p_f4$4|hhNJqmCU=+iW3J?5`Fm93fy8^UXm3HGce{sWV3UEl9U$`0 z0nnWp25Ya}$YeC~&*-Wq-^Zr)_)R&p)Ur`tz-t;&YNLiI=9adOOQsZVv@r67!xZfA zqz>vHtF{Dko+2c(z%ESDIbdq-=0A4^X#WH=TV&~JpB|f%CZPT7Sa7^3EwWMP4s#%tC7*`%l;*x~d{QVd>f|}0%=Nii8RVYQ*nJ+jEM9)^ZQM7R`mY9IXoQX@01~Zak8`aRMTFbA!aQ~d@l2{OeWW_02bQ*jH zMq7UB5v}j`Q&EAJSsL666#MOJIS{Kd^!0ul??%gn&xKwIMXsd-VYdUf*(>w6IlpBJ z%TGgR99OoW$r3B%XF4K6h1{JG#6ha#TXD8 zB8Y7{sOD~LG8ZW zW9tx~mIX@Cn;TTC;iq?fa`qeW3^NI#m|qqZ+9KocD?jFM^z&PZHLiCdR@y=^G>WBF zmVtVx1)RoEN`aX2O|BQ0ztvlrx4WAe&$QiR3;S@%u>Gskq{vsvf|{%H#?~UuZyRAV zbfzI#%&E6Da=0tnLfzAH6F;0ud+LE2>xvlV{$ABNcye03$oDvNj@QVi5O`3Y9qW-l z36^;!YDMvoPNj)8{e~)&YRh@x!ZS_X*vj_3t$E;?ozO&{^N@3@3HsMFCM6f&M8235 z?V*({#VTrVs4$s6yrhHN^Rz|M{*X-+9e8u+Z>7Y}kaMN6`)<)&!ex5Qwp_%=Gvk}P z?RamsS)jk>b5l9-pS}FAq?^`6d(MWYt_Q010^jxHC32{b0FYtqC?=boCCH5L8wNxh3` zrb?&UlCX}b#+P4}cJ8@Lr=TM*uDts8k($EF<}Ug==k+j`A{EdAo4aQ44?B;?rr+MS z%^7%(POlvzeK;82Ffj3A@sq3$hrAFhK5I3g@{W!jYl>GRKazM5(|_o9p6;CLo6ny* z(l)`g@({0-S;+dK?M#ZVY%2S;M`~(J{5Lucy1S$O9@8OP(kJh200eJA!7j^A!)y!^ z_LDE{yiW^+|J-oFh*19Ui_fBcNuzQ{u(MO84d!e}dDYt!{6@er?F^;CiPj$MXPwR%B@`dQi2UZ%ko`oJMdH^+YNXDG5(6^ zg73D0_4_9P>Z_~2m-_3-5<60iLE$g(h9wDbG!%Y7f50#8Se?qh=7|j$DzYQw{D`}p z!UMd<;ji9W_@jwHlQ(Jj|)S)>RlD>lio(qkoV?N@~ frjzE5=sB`(=*#jx6a}6&(LB7bbMK3)^{f8_pXUB8 diff --git a/spring-cloud-stream-docs/src/main/asciidoc/images/rabbit-binder.png b/spring-cloud-stream-docs/src/main/asciidoc/images/rabbit-binder.png deleted file mode 100755 index aabf698b3a9873395764d1d974996a22436188a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12440 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 diff --git a/spring-cloud-stream-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc b/spring-cloud-stream-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc index 2b16b92c2..e0354f25f 100644 --- a/spring-cloud-stream-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc +++ b/spring-cloud-stream-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc @@ -98,7 +98,7 @@ To run a Spring Cloud Stream application in production, you can create an execut === The Binder Abstraction -Spring Cloud Stream provides Binder implementations for https://github.com/spring-cloud/spring-cloud-stream/tree/master/spring-cloud-stream-binders/spring-cloud-stream-binder-kafka[Kafka], https://github.com/spring-cloud/spring-cloud-stream/tree/master/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit[Rabbit MQ], https://github.com/spring-cloud/spring-cloud-stream-binder-redis[Redis], and https://github.com/spring-cloud/spring-cloud-stream-binder-gemfire[Gemfire]. +Spring Cloud Stream provides Binder implementations for https://github.com/spring-cloud/spring-cloud-stream/tree/master/spring-cloud-stream-binders/spring-cloud-stream-binder-kafka[Kafka] and https://github.com/spring-cloud/spring-cloud-stream/tree/master/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit[Rabbit MQ]. Spring Cloud Stream also includes a https://github.com/spring-cloud/spring-cloud-stream/blob/master/spring-cloud-stream-test-support/src/main/java/org/springframework/cloud/stream/test/binder/TestSupportBinder.java[TestSupportBinder], which leaves a channel unmodified so that tests can interact with channels directly and reliably assert on what is received. You can use the extensible API to write your own Binder. @@ -475,12 +475,6 @@ public class TransformProcessor { ---- ==== -[NOTE] -==== -In the case of RabbitMQ, content type headers can be set by external applications. -Spring Cloud Stream supports them as part of an extended internal protocol used for any type of transport (including transports, such as Kafka, that do not normally support headers). -==== - ==== Reactive Programming Support Spring Cloud Stream also supports the use of reactive APIs where incoming and outgoing data is handled as continuous data flows. @@ -736,21 +730,13 @@ org.springframework.cloud.stream.binder.kafka.config.KafkaBinderConfiguration Spring Cloud Stream relies on implementations of the Binder SPI to perform the task of connecting channels to message brokers. Each Binder implementation typically connects to one type of messaging system. -Out of the box, Spring Cloud Stream provides binders for Kafka, RabbitMQ, and Redis. ==== Classpath Detection By default, Spring Cloud Stream relies on Spring Boot's auto-configuration to configure the binding process. If a single Binder implementation is found on the classpath, Spring Cloud Stream will use it automatically. -For example, a Spring Cloud Stream project that aims to bind only to RabbitMQ can simply add the following dependency: - -[source,xml] ----- - - org.springframework.cloud - spring-cloud-stream-binder-rabbit - ----- +For example, a Spring Cloud Stream project that aims to bind only to RabbitMQ can simply add that binder dependency. +For the specific maven coordinates of the binder dependency, please refer to the docs for the binder implementation. [[multiple-binders]] === Multiple Binders on the Classpath @@ -845,30 +831,6 @@ This allows adding binder configurations without interfering with the default pr + Default `true`. - -=== Implementation strategies - -This section details the binder implementation strategies for Kafka and Rabbit MQ, in what concerns mapping the Spring Cloud Stream concepts onto the middleware concepts. - -==== Kafka Binder - -.Kafka Binder -image::kafka-binder.png[width=300,scaledwidth="50%"] - -The Kafka Binder implementation maps the destination to a Kafka topic. -The consumer group maps directly to the same Kafka concept. -Spring Cloud Stream does not use the high-level consumer, but implements a similar concept for the simple consumer. - - -==== RabbitMQ Binder - -.RabbitMQ Binder -image::rabbit-binder.png[width=300,scaledwidth="50%"] - -The RabbitMQ Binder implementation maps the destination to a `TopicExchange`. -For each consumer group, a `Queue` will be bound to that `TopicExchange`. -Each consumer instance that binds will trigger creation of a corresponding RabbitMQ `Consumer` instance for its group's `Queue`. - == Configuration Options Spring Cloud Stream supports general configuration options as well as configuration for bindings and binders. @@ -1025,262 +987,6 @@ Useful when producing data for non-Spring Cloud Stream applications. + Default: `embeddedHeaders`. -[[binder-specific-configuration]] -== Binder-Specific Configuration - -The following binder, consumer, and producer properties are specific to binder implementations. - -=== Rabbit-Specific Settings - -==== RabbitMQ Binder Properties - -By default, the RabbitMQ binder uses Spring Boot's `ConnectionFactory`, and it therefore supports all Spring Boot configuration options for RabbitMQ. -(For reference, consult the http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties[Spring Boot documentation].) RabbitMQ configuration options use the `spring.rabbitmq` prefix. - -In addition to the Spring Boot options, the RabbitMQ binder supports the following properties: - -spring.cloud.stream.rabbit.binder.adminAddresses:: - A comma-separated list of RabbitMQ management plugin URLs. -Only used when `nodes` contains more than one entry. -Each entry in this list must have a corresponding entry in `spring.rabbitmq.addresses`. -+ -Default: empty. -spring.cloud.stream.rabbit.binder.nodes:: - A comma-separated list of RabbitMQ node names. -When more than one entry, used to locate the server address where a queue is located. -Each entry in this list must have a corresponding entry in `spring.rabbitmq.addresses`. -+ -Default: empty. -spring.cloud.stream.rabbit.binder.compressionLevel:: - Compression level for compressed bindings. -See `java.util.zip.Deflater`. -+ -Default: `1` (BEST_LEVEL). - -==== RabbitMQ Consumer Properties - -The following properties are available for Rabbit consumers only and -must be prefixed with `spring.cloud.stream.rabbit.bindings..consumer.`. - -acknowledgeMode:: - The acknowledge mode. -+ -Default: `AUTO`. -autoBindDlq:: - Whether to automatically declare the DLQ and bind it to the binder DLX. -+ -Default: `false`. -durableSubscription:: - Whether subscription should be durable. -Only effective if `group` is also set. -+ -Default: `true`. -maxConcurrency:: - Default: `1`. -prefetch:: - Prefetch count. -+ -Default: `1`. -prefix:: - A prefix to be added to the name of the `destination` and queues. -+ -Default: "". -recoveryInterval:: - The interval between connection recovery attempts, in milliseconds. -+ -Default: `5000`. -requeueRejected:: - Whether delivery failures should be requeued. -+ -Default: `true`. -requestHeaderPatterns:: - The request headers to be transported. -+ -Default: `[STANDARD_REQUEST_HEADERS,'*']`. -replyHeaderPatterns:: - The reply headers to be transported. -+ -Default: `[STANDARD_REPLY_HEADERS,'*']`. -republishToDlq:: - By default, messages which fail after retries are exhausted are rejected. -If a dead-letter queue (DLQ) is configured, RabbitMQ will route the failed message (unchanged) to the DLQ. -If set to `true`, the bus will republish failed messages to the DLQ with additional headers, including the exception message and stack trace from the cause of the final failure. -transacted:: - Whether to use transacted channels. -+ -Default: `false`. -txSize:: - The number of deliveries between acks. -+ -Default: `1`. - -==== Rabbit Producer Properties - -The following properties are available for Rabbit producers only and -must be prefixed with `spring.cloud.stream.rabbit.bindings..producer.`. - -autoBindDlq:: - Whether to automatically declare the DLQ and bind it to the binder DLX. -+ -Default: `false`. -batchingEnabled:: - Whether to enable message batching by producers. -+ -Default: `false`. -batchSize:: - The number of messages to buffer when batching is enabled. -+ -Default: `100`. -batchBufferLimit:: - Default: `10000`. -batchTimeout:: - Default: `5000`. -compress:: - Whether data should be compressed when sent. -+ -Default: `false`. -deliveryMode:: - Delivery mode. -+ -Default: `PERSISTENT`. -prefix:: - A prefix to be added to the name of the `destination` exchange. -+ -Default: "". -requestHeaderPatterns:: - The request headers to be transported. -+ -Default: `[STANDARD_REQUEST_HEADERS,'*']`. -replyHeaderPatterns:: - The reply headers to be transported. -+ -Default: `[STANDARD_REPLY_HEADERS,'*']`. - -=== Kafka-Specific Settings - -==== Kafka Binder Properties - -spring.cloud.stream.kafka.binder.brokers:: - A list of brokers to which the Kafka binder will connect. -+ -Default: `localhost`. -spring.cloud.stream.kafka.binder.defaultBrokerPort:: - `brokers` allows hosts specified with or without port information (e.g., `host1,host2:port2`). -This sets the default port when no port is configured in the broker list. -+ -Default: `9092`. -spring.cloud.stream.kafka.binder.zkNodes:: - A list of ZooKeeper nodes to which the Kafka binder can connect. -+ -Default: `localhost`. -spring.cloud.stream.kafka.binder.defaultZkPort:: - `zkNodes` allows hosts specified with or without port information (e.g., `host1,host2:port2`). -This sets the default port when no port is configured in the node list. -+ -Default: `2181`. -spring.cloud.stream.kafka.binder.headers:: - The list of custom headers that will be transported by the binder. -+ -Default: empty. -spring.cloud.stream.kafka.binder.offsetUpdateTimeWindow:: - The frequency, in milliseconds, with which offsets are saved. -Ignored if `0`. -+ -Default: `10000`. -spring.cloud.stream.kafka.binder.offsetUpdateCount:: - The frequency, in number of updates, which which consumed offsets are persisted. -Ignored if `0`. -Mutually exclusive with `offsetUpdateTimeWindow`. -+ -Default: `0`. -spring.cloud.stream.kafka.binder.requiredAcks:: - The number of required acks on the broker. -+ -Default: `1`. -spring.cloud.stream.kafka.binder.minPartitionCount:: - Effective only if `autoCreateTopics` or `autoAddPartitions` is set. -The global minimum number of partitions that the binder will configure on topics on which it produces/consumes data. -It can be superseded by the `partitionCount` setting of the producer or by the value of `instanceCount` * `concurrency` settings of the producer (if either is larger). -+ -Default: `1`. -spring.cloud.stream.kafka.binder.replicationFactor:: - The replication factor of auto-created topics if `autoCreateTopics` is active. -+ -Default: `1`. -spring.cloud.stream.kafka.binder.autoCreateTopics:: - If set to `true`, the binder will create new topics automatically. -If set to `false`, the binder will rely on the topics being already configured. -In the latter case, if the topics do not exist, the binder will fail to start. -Of note, this setting is independent of the `auto.topic.create.enable` setting of the broker and it does not influence it: if the server is set to auto-create topics, they may be created as part of the metadata retrieval request, with default broker settings. -+ -Default: `true`. -spring.cloud.stream.kafka.binder.autoAddPartitions:: - If set to `true`, the binder will create add new partitions if required. -If set to `false`, the binder will rely on the partition size of the topic being already configured. -If the partition count of the target topic is smaller than the expected value, the binder will fail to start. -+ -Default: `false`. -spring.cloud.stream.kafka.binder.socketBufferSize:: - Size (in bytes) of the socket buffer to be used by the Kafka consumers. -+ -Default: `2097152`. - -==== Kafka Consumer Properties - -The following properties are available for Kafka consumers only and -must be prefixed with `spring.cloud.stream.kafka.bindings..consumer.`. - -autoCommitOffset:: - Whether to autocommit offsets when a message has been processed. -If set to `false`, an `Acknowledgment` header will be available in the message headers for late acknowledgment. -+ -Default: `true`. -autoCommitOnError:: - Effective only if `autoCommitOffset` is set to `true`. -If set to `false` it suppresses auto-commits for messages that result in errors, and will commit only for successful messages, allows a stream to automatically replay from the last successfully processed message, in case of persistent failures. -If set to `true`, it will always auto-commit (if auto-commit is enabled). -If not set (default), it effectively has the same value as `enableDlq`, auto-committing erroneous messages if they are sent to a DLQ, and not committing them otherwise. -+ -Default: not set. -recoveryInterval:: - The interval between connection recovery attempts, in milliseconds. -+ -Default: `5000`. -resetOffsets:: - Whether to reset offsets on the consumer to the value provided by `startOffset`. -+ -Default: `false`. -startOffset:: - The starting offset for new groups, or when `resetOffsets` is `true`. -Allowed values: `earliest`, `latest`. -+ -Default: null (equivalent to `earliest`). -enableDlq:: - When set to true, it will send enable DLQ behavior for the consumer. - Messages that result in errors will be forwarded to a topic named `error..`. - This provides an alternative option to the more common Kafka replay scenario for the case when the number of errors is relatively small and replaying the entire original topic may be too cumbersome. -+ -Default: `false`. - -==== Kafka Producer Properties - -The following properties are available for Kafka producers only and -must be prefixed with `spring.cloud.stream.kafka.bindings..producer.`. - -bufferSize:: - Upper limit, in bytes, of how much data the Kafka producer will attempt to batch before sending. -+ -Default: `16384`. -sync:: - Whether the producer is synchronous. -+ -Default: `false`. -batchTimeout:: - How long the producer will wait before sending in order to allow more messages to accumulate in the same batch. -(Normally the producer does not wait at all, and simply sends all the messages that accumulated while the previous send was in progress.) A non-zero value may increase throughput at the expense of latency. -+ -Default: `0`. - [[contenttypemanagement]] == Content Type and Transformation @@ -1684,15 +1390,6 @@ This can be customized on the binding, either by setting a SpEL expression to be Additional properties can be configured for more advanced scenarios, as described in the following section. -[NOTE] -==== -The Kafka binder will use the `partitionCount` setting as a hint to create a topic with the given partition count (in conjunction with the `minPartitionCount`, the maximum of the two being the value being used). -Exercise caution when configuring both `minPartitionCount` for a binder and `partitionCount` for an application, as the larger value will be used. -If a topic already exists with a smaller partition count and `autoAddPartitions` is disabled (the default), then the binder will fail to start. -If a topic already exists with a smaller partition count and `autoAddPartitions` is enabled, new partitions will be added. -If a topic already exists with a larger number of partitions than the maximum of (`minPartitionCount` and `partitionCount`), the existing partition count will be used. -==== - ===== Configuring Input Bindings for Partitioning An input binding (with the channel name `input`) is configured to receive partitioned data by setting its `partitioned` property, as well as the `instanceIndex` and `instanceCount` properties on the application itself, as in the following example: