From d012a7da17ff2e92afc52fff11eb2c02d74bc612 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Mon, 2 Apr 2018 15:12:05 -0400 Subject: [PATCH] GH-1248 Updated Programming Model section GH-1248 Removed 'Accessing Bound Channels' section GH-1248 Removed 'Aggregation' section Resolves #1248 Resolves #1348 Resolves #1346 --- .../main/asciidoc/images/SCSt-overview.png | Bin 0 -> 96212 bytes .../spring-cloud-stream-overview.adoc | 620 +++++++----------- 2 files changed, 230 insertions(+), 390 deletions(-) create mode 100644 spring-cloud-stream-core-docs/src/main/asciidoc/images/SCSt-overview.png diff --git a/spring-cloud-stream-core-docs/src/main/asciidoc/images/SCSt-overview.png b/spring-cloud-stream-core-docs/src/main/asciidoc/images/SCSt-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..46dd0c809e705714e5667946f7ac38c292adb402 GIT binary patch literal 96212 zcmeFY_ghon_AQKxQYbLCp|=160hK1CU?`zu z3oRf>4FnLS2!x_k0n6uZJm*{P@%{nt53kR|lbGziv-VnZjXCBVV`DDcSsdp)&B?;T za@@+&%z=gF5Q&B5fFAo1;FH%{%X};>$7KCXO)p!Sno3+o1zq$z|=U>p9LB$a)9lWhnIIJ@w7sWzDZRqMt#lvpe>}f4+)8lA=0y@E+AT|4jyJ zL&AWaW%UieH7AQih-uT<&_Ok-StsueD+%Mc_jB6Tn3h>>Q%uoG1I(II+~9%B&rsUw zN-PT~&mNONfkacUW8{oD`IE*I2g!zz*Po3ixYk}YH%G+{6C^3UJ1TY~hOq0$I%aQG zJtkKPJbDqsUNQ~s-TbFo^dI+i6x>v&=c&Wt^tiC__v@{5vlcWp{^{W7i8(HD7bII% zX3zed+j(Lnkam9IpEO1In}P$PESD8h_;@+U2dJgbCvsjGH{C5gmv~%lSwHuT(p7nd z`R968cYa=t3OVg{I`>?R4(~;k2Ky&U@@H?H`(l2eQ2%6ggJo*Y^I44N*^_b|MmDiK zt>@(>Q6J{vY4`XwW~I~Gx^>?DBXa0T`pd8quImNzq7_Fsc-Y6(9%@$@r3yaFPq3Xv zoty}f?EPZhaq;-t?3$?w7JaQP>dJt`U4jXeTf}hTm2JMT)V65{tzml--*3{EDDv&tv>rDH z>T}Q&Sk?_~cl9t%<+p`Z!IE_7i*<5gfK9EWuv(^|NutDK9>lHa3Gwf3MV~adD~_%{ zisV|``(htvenVbQZbBl2d(}oj!1~VBUe^Anhfv3a2`V!`n76D2hef&Ce_f3d6sEt~ zy05=_MC0)11Lx{=Ywq-cHKA*Do+sL+bknY^v!f)&_AHKsxHtZ|buzrH_3NW_Nc*ii zmv_>JBX9OdclCCXfA;ga$BDk~g~`9%a5*}{o-?XO;An~wO`G{#yXHjJd|cJ0xHJ1& z`)%Pm@<=ePNe*2R%tSH8MGhVQ>34WNC6(Rbjm)U;0caWTIsP8j4WqMX*t*}` zd?^-i(EW|wOSWaUq^F1TS$tn#ymfej<@+bMMb=6qt}w1WZdOUj^D*}qB-`T-!(!_t zJmU;`tu5FS^7)dt+-pK@95%UzMDy1iM?@g zGiJ(DK`l@FVSP^h{rc>%{876olV#a7%Lp0Wbn&xUR7w8SOIAykO;#P25G!19ib91# zyMl_sH3dHfDJ%?o3G1O?0VY-GK^CR)8Oogovo7i>dbsAq=A;RmR-09s?^n*BaXx8y zNlG?PJ*6tk!CuFdQwR@`{~{ zoy$XwR;t|UK(3PxxRTy0g+$MiJ1)PnA}WuVzH^m!mbUjMx2q&=oK`(=m7A6OELZP6 z?|Wjd{Ds1E=N=0^Z2P4CMT4Sdrva*sb8~hJAO;XoM141en?56#5ym4KIOqpDkQpU*O)>s{(|o-Juo^3GFT2d&H5mF}fYknfLIef3K{Uw9^e z)2D?V z3&$U)3l*GS)*MjdJWtbfgNF>g=+3#e9HeyK6CTyGBkPzaMD2l-;03Vl9Kjs3oK71` zPR*0eCvH#Vo(SZvUWmSGuC}4xecl~Da&yExFhC4pFxcGtlXQ6OZMVr)a{Dx)jm=uI z`(*dwtfVYeLI`ox`Jyx0`8&~Xf z*nQ8xfa}mcrK_d;3Qb0TZggsZ-Y#i)+|Y|eprU84&$r(mUkDw?eHL43ecdwrDqw>eXD7`4osO=v==ls9s%`|m?Z@Yo- z|JgroZn&ngHM4_QTl(g^SN0=l`z!l7j!&#Zta>NTADulM$Q32#!G)D+ z=khnUEG~b6r7(5@UNHxO0f7pk+>?z4o7ZyuT%27zTsKuL+TlWtgPry^R?-cHFF(}A*Plhc zN|8-Y5_Z3^?b;mtvuCH8BQd6nqlx#U{1JH->*j19oQ(BNTW9NnRA}B$Nm-c^sS@w} znR?e5l~QIIr(@oLrC*od_+UgwY_gYrYw&{~F#{Z0@@}^InrlC0epxkSB-=RW^*o7^ zz@-+Xw<@+2@^zPg-n{-&qe3I1UTO98s-mYv5PxOD*N)0hhJBmegwCk6x$IhXyfwGP zi<2QoUEglK)f(d&%d0Y+rG8oN6za6?n#?Op&n~#_Qhb)igQIED3bUqED16!Rx}`fd zuKFbwyl2N$E*A5Z*dBKKmKtq!UHQkw?H3Q z7p-i;tRCg?b?Y5fbjhZJ)gtk5>rqW*>M71s6lIi0O<+G=-E-^_s%)LM{=03W?NpYw zs%w+aRlhF-6u4Nori#4EDdkrUQdir0Ig{d_$IB}gK{N?4l7jozcV-v957Gz@bTf68 zb{`~b-b4(7HqhPlt;$n`S6BFert>}i}1a>wO1S3^m}`K#Va%}G-Nq(D!gK(ni87*h6G37z!6CP-(w~r z+cC?26?K(URS@5xU4xhQl&^C^i?1dp#2a31-J{>%dnmw$=TbX?y&!RXP&nfB;UrPp za@&>I4v|2_Ho{=D>D^adHygK#VaKDe*}P{Y>8E~I>A z;pxbVm5|xRVBfdB`Fg@3+oL+Kf|ci^d&OHnp`Wci?`V5$y_$XE*XQ3I&oomgkGl)9 z^GIP{eu3hXcQ$Xn9_FK)kZ=vXt#{VUdy=;Eth9ora&O^hG{0^q=r-K`IHBA;emiJ2 z`t7eOHYS&X_-Q@DZua|E+o540BH<_37Y1fxI=&a&Dr}BWh-OT=t|x92)*IF~7^hTJ z-5TFElA1;SsoKEqfW2-n7M{NA{EBiX`dj7eS1MbHON&v`;TqpU*K}KM>;4Y?(NwEN z`u_Px^Y>_RngKIy4#ARRinKYeUheO) zVfnbqa_>mr$wb9(KhJrFYdNw%Z?;$9-m!NHzv~#s#3Nxh4^Y2nY-Yh3QNEIRXT{-~U)uO5)EUA^!SOF1D8? zOoLExi3=*{RnAEna7su>=%IYBgB;Av|9v{}KYghiAtARws;akd-&VP;p%R4hRaMi` z(NR68uBxuC3>={x93B{QElfEuSo&WV`LFAk!Gpa~ez!vWf&wM>uX_y^gbvY{lG^{F z|Ni%{al*s={^yqhga3V7zzwSIf1|3Va!&QXuMM24xBn^VvR@cHz{SiD0S^oYe#1cL zyt>|>yu{P?;6+^gi?3tfTnp}YZ=AI^Zi|nLfAD;O$1F8&=z}in z!I%${+-?V{|3uAyM7!RGf7RER&(E_-uQe=;^sQ{6ecZ^?nO~k-R^Ry5WcemT`V+hM z!Q^}Y@$$ie^-J(HV?c4{J&IN2fW>Q`TmRR~8J=6yOsxn1an_$p8R3EN7|iaOq~QPS zl>fTGH1qp^{@VY49x%WE-<%iYtLw8}*Cy(bpQrx$U3YS~|GxrZLFk}&NAmHX;Xr)c z50&~vt;NyX+~ zeUe-Efap7SlKtm;_N!wMuV}Q3FAn`SYU91u<%O3C`}wQKvZge8e_XWTJEJZav6(OU%GZC z%0bO>?sQ6~Z3XlPGpfhH`LR7=BFoj4Sv3bn(d=nkWQDBZ8UOAY!iGbNay3e+bf-OJ z#H$;msutp^aCa*D`=i4GF0V28dtWRpo<3sNMj}36T$9r|nEbkjogF!O_2KciKR5ck zPA}NC_7(+5xw|g~Z8?*w>h?fYwPdv07^B07W;s%KX?3GwJE6^Pw=@9ZPBnxVDxR8h z>TwFk7B1`$fg(FK^l`7wcEsnY-FWUOWbDhPj_69_qBk66r{*zP<#cQ*Xs+?jXj>HG z3D*10NIPw$gGmfn$)kbS2(1_;3O8LyK1>GkDlcz7?cHU)MMtac_HI# z^r~L#lOClT3wfO*l=8cxk^bIGHC44KU72ZwAne5aaDx{P z72G{yXY+<+4JJiOGz=AC=gSp+$NfD9!_b_e4y<)kWlCKy5I=i7ojj27^1dz|+&v-!D7YNQ_MCRzBNg56;{QDk zkqr!XOnWpHHiz!slNw5q+%As@o&z_6$hEc^VGPyBNh5W#;?jq~2>jCE(I%%vr-mB+ z(iH54TKl$_bIzp&AUHYzMrQ8#3FGXqT}9;5C^*|+wJp6J4E)wCuAcMKoe)+=0x&(> zp29&-fay8IdL9WEO}A@&SGh4d>w~Y}cAjzyJl)4|9~((2DDFnL+K+#q%7S!hlBg9k z5V{sTTcHkZoj02^P)2jyveb+2X}iH|0dsESYtor}VP%BVq?0SXO+C&wmCg;U=6DeZ zm}r`zb6__iALQ%rJD20-nD>lQdD9#G%X!MI_4~)j=!%yUL%_KHW7#AwLN6Tn5WY47 z2c@)P0uaQz*jD$*r4*a0Ew_ebThT%g@}=Zhm~--2X7aCpBCZwUr3Jj`s=EqJ3el6= zFs(XKWj{-t7uEyoIbFJ(o5fdIZr}4U%Te)ycN<2uxc^qR))0&UHtSc~me3w?kz}A!l9SjwO}C7RyYLr4d(oXGh^lauCyh zWrOQG?&e!L0Z8^@Gm+~_F(RbZK9BDHBR>FL z-Uuw>`rnIK5$8_`uIzRQFPAE#gO>3={*Le|r=XdRSr=EZJ~|4fiS7>gwPO{(2!rEB z=ci|P^o6m!&RxM&Mx zACRu>4RQyHLT#Im^bb>NKJPQ zzizeYIM;|%%X1Mju%$JTiA(+~1QGx0S~5zsP$92W4ZobnBu3lyE^7Bht~PXN`5t7q zPc}-}kE!W|8QcAs(&GL=1%Fi#SsGoca`Kd#-*k(O)~ebf#?yxkLJh#^keNZhWhWdt ztfdO8ZM*bhrVJq?-W2-WT2yz3;6mq+$9RSyS^dHWE>oKu1h6rZ9?@ktkM15�BUgAMG00cIrC8+4-QSzZYjb~M& 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

^=LG!>?=FNiA^M8YE|vLq^yK$zg6!v)&xG; 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 -* <> -* <> -* <> -* <> -* <> +=== Destination Binders -[[spring-cloud-stream-overview-triggering-binding-enablebinding]] -==== Triggering Binding by Using `@EnableBinding` +Destination Binders are extension components of Spring Cloud Stream responsible for providing the necessary configuration and implementation to facilitate +integration with external messaging systems. +This integration is responsible for connectivity, delegation, and routing of messages to and from producers and consumers, data type conversion, +invocation of the user code, and more. -You can turn a Spring Boot application into a Spring Cloud Stream application by applying the `@EnableBinding` annotation to one of the application's configuration classes. -The `@EnableBinding` annotation itself is meta-annotated with `@Configuration` and triggers the configuration of the Spring Cloud Stream infrastructure. The following example shows a typical use case: +Binders handle a lot of the boiler plate responsibilities that would otherwise fall on your shoulders. However, to accomplish that, the binder still needs +some help in the form of minimalistic yet required set of instructions from the user, which typically come in the form of some type of configuration. -[source,java] +While it is out of scope of this section to discuss all of the available binder and binding configuration options (the rest of the manual covers them extensively), +_Destination Binding_ does require special attention. The next section discusses it in detail. + +=== Destination Bindings + +As stated earlier, _Destination Bindings_ provide a bridge between the external messaging system and application-provided _Producers_ and _Consumers_. + +Applying the @EnableBinding annotation to one of the application’s configuration classes defines a destination binding. +The `@EnableBinding` annotation itself is meta-annotated with `@Configuration` and triggers the configuration of the Spring Cloud Stream infrastructure. + +The following example shows a fully configured and functioning Spring Cloud Stream application that receives the payload of the message from the `INPUT` +destination as a `String` type (see <> section), logs it to the console and sends it to the `OUTPUT` destination after converting it to upper case. + +[source, java] ---- -... -@Import(...) -@Configuration -@EnableIntegration -public @interface EnableBinding { - ... - Class[] value() default {}; +@SpringBootApplication +@EnableBinding(Processor.class) +public class MyApplication { + + public static void main(String[] args) { + SpringApplication.run(MyApplication.class, args); + } + + @StreamListener(Processor.INPUT) + @SendTo(Processor.OUTPUT) + public String handle(String value) { + System.out.println("Received: " + value); + return value.toUpperCase(); + } } ---- -The `@EnableBinding` annotation can take as parameters one or more interface classes that contain methods representing bindable components (typically message channels). +As you can see the `@EnableBinding` annotation can take one or more interface classes as parameters. The parameters are referred to as _bindings_, +and they contain methods representing _bindable components_. +These components are typically message channels (see https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-messaging.html[Spring Messaging]) +for channel-based binders (such as Rabbit, Kafka, and others). However other types of bindings can +provide support for the native features of the corresponding technology. For example Kafka Streams binder (formerly known as KStream) allows native bindings directly to Kafka Streams +(see https://docs.spring.io/autorepo/docs/spring-cloud-stream-binder-kafka-docs/1.1.0.M1/reference/htmlsingle/[Kafka Streams] for more details). -NOTE: The `@EnableBinding` annotation is only required on your `Configuration` classes. You can provide as many binding interfaces as you need, as shown in the following example: +Spring Cloud Stream already provides _binding_ interfaces for typical message exchange contracts, which include: -`@EnableBinding(value={Orders.class, Payment.class}` +* *Sink:* Identifies the contract for the message consumer by providing the destination from which the message is consumed. +* *Source:* Identifies the contract for the message producer by providing the destination to which the produced message is sent. +* *Processor:* Encapsulates both the sink and the source contracts by exposing two destinations that allow consumption and production of messages. -where both `Order` and `Payment` interfaces would declare `@Input` and `@Output` channels. - -[[spring-cloud-stream-overview-input-output]] -==== `@Input` and `@Output` - -A Spring Cloud Stream application can have an arbitrary number of input and output channels defined in an interface as `@Input` and `@Output` methods. The following example declares one input and two output channels: - -[source,java] ----- -public interface Barista { - - @Input - SubscribableChannel orders(); - - @Output - MessageChannel hotDrinks(); - - @Output - MessageChannel coldDrinks(); -} ----- - -Using the interface shown in the preceding example as a parameter to `@EnableBinding` triggers the creation of three bound channels named `orders`, `hotDrinks`, and `coldDrinks`, respectively. - -NOTE: In Spring Cloud Stream, the bindable `MessageChannel` components are the Spring Messaging `MessageChannel` (for outbound) and its extension `SubscribableChannel` (for inbound). -Using the same mechanism, other bindable components can be supported. -`KStream` support in Spring Cloud Stream Kafka binder is one such example, where KStream is used as inbound and outbound `bindable` components. -Also, as discussed later, a `PollableMessageSource` can be bound to an inbound destination. -In this documentation, we continue to refer to MessageChannel components as the `bindable` components. - -Starting with version 2.0, you can now bind a pollable consumer, as follows: - -[source,java] ----- -public interface PolledBarista { - - @Input - PollableMessageSource orders(); - - @Output - MessageChannel hotDrinks(); - - @Output - MessageChannel coldDrinks(); -} ----- - -In this case, an implementation of `PollableMessageSource` is bound to the `orders` "`channel`". - -===== Customizing Channel Names - -By using the `@Input` and `@Output` annotations, you can specify a customized channel name for the channel, as shown in the following example: - -[source,java] ----- -public interface Barista { - ... - @Input("inboundOrders") - SubscribableChannel orders(); -} ----- - -In the preceding example, the created bound channel is named `inboundOrders`. - -===== `Source`, `Sink`, and `Processor` - -For easy addressing of the most common use cases (which involve either an input channel, an output channel, or both), Spring Cloud Stream provides three pre-defined interfaces out of the box. - -`Source` can be used for an application which has a single outbound channel, as shown in the following example: - -[source,java] ----- -public interface Source { - - String OUTPUT = "output"; - - @Output(Source.OUTPUT) - MessageChannel output(); - -} ----- - -`Sink` can be used for an application which has a single inbound channel, as shown in the following example: - -[source,java] +[source, java] ---- public interface Sink { @@ -333,137 +274,162 @@ public interface Sink { @Input(Sink.INPUT) SubscribableChannel input(); - } ---- -`Processor` can be used for an application that has both an inbound channel and an outbound channel, as shown in the following example: - -[source,java] ----- -public interface Processor extends Source, Sink { -} ----- - -Spring Cloud Stream provides no special handling for any of these interfaces. They are only provided out of the box. - -[[spring-cloud-stream-overview-accessing-bound-channels]] -==== Accessing Bound Channels - -Spring Cloud Stream offers two ways to access bound channels: - -* <> -* <> - -[[spring-cloud-stream-overview-injecting-bound-interfaces]] -===== Injecting Bound Interfaces - -For each bound interface, Spring Cloud Stream generates a bean that implements the interface. -Invoking an `@Input`-annotated or `@Output`-annotated method of one of these beans returns the relevant bound channel. - -The bean in the following example sends a message on the output channel when its `hello` method is invoked and invokes `output()` on the injected `Source` bean to retrieve the target channel: - -[source,java] ----- -@Component -public class SendingBean { - - private Source source; - - @Autowired - public SendingBean(Source source) { - this.source = source; - } - - public void sayHello(String name) { - source.output().send(MessageBuilder.withPayload(name).build()); - } -} ----- - -[[spring-cloud-stream-overview-injecting-channels-directly]] -===== Injecting Channels Directly - -Bound channels can be also injected directly, as shown in the following example: - [source, java] ---- -@Component -public class SendingBean { +public interface Source { - private MessageChannel output; + String OUTPUT = "output"; - @Autowired - public SendingBean(MessageChannel output) { - this.output = output; - } - - public void sayHello(String name) { - output.send(MessageBuilder.withPayload(name).build()); - } + @Output(Source.OUTPUT) + MessageChannel output(); } ---- -If the name of the channel is customized on the declaring annotation, that name should be used instead of the method name. -Consider the following declaration: - -[source,java] ----- -public interface CustomSource { - ... - @Output("customOutput") - MessageChannel output(); -} ----- - -Given that declaration, the channel is injected as shown in the following example: - [source, java] ---- -@Component -public class SendingBean { +public interface Processor extends Source, Sink {} +---- - private MessageChannel output; +While the preceding example satisfies the majority of cases, you can also define your own contracts by defining your own bindings interfaces and use `@Input` and `@Output` +annotations to identify the actual _bindable components_. - @Autowired - public SendingBean(@Qualifier("customOutput") MessageChannel output) { - this.output = output; - } +For example: - public void sayHello(String name) { - this.output.send(MessageBuilder.withPayload(name).build()); - } +[source, java] +---- +public interface Barista { + + @Input + SubscribableChannel orders(); + + @Output + MessageChannel hotDrinks(); + + @Output + MessageChannel coldDrinks(); } ---- +Using the interface shown in the preceding example as a parameter to `@EnableBinding` triggers the creation of the three bound channels named `orders`, `hotDrinks`, and `coldDrinks`, +respectively. + +You can provide as many binding interfaces as you need, as arguments to the `@EnableBinding` annotation, as shown in the following example: + +[source, java] +---- +@EnableBinding(value={Orders.class, Payment.class} +---- + +In Spring Cloud Stream, the bindable `MessageChannel` components are the Spring Messaging `MessageChannel` (for outbound) and its extension, `SubscribableChannel`, +(for inbound). + +*Pollable Destination Binding* + +While the previously described bindings support event-based message consumption, sometimes you need more control, such as rate of consumption. + +Starting with version 2.0, you can now bind a pollable consumer: + +The following example shows how to bind a pollable consumer: + +[source, java] +---- +public interface PolledBarista { + + @Input + PollableMessageSource orders(); + . . . +} +---- + +In this case, an implementation of `PollableMessageSource` is bound to the `orders` “channel”. See <> for more details. + +*Customizing Channel Names* + +By using the `@Input` and `@Output` annotations, you can specify a customized channel name for the channel, as shown in the following example: + +[source, java] +---- +public interface Barista { + @Input("inboundOrders") + SubscribableChannel orders(); +} +---- + +In the preceding example, the created bound channel is named `inboundOrders`. + +Normally, you need not access individual channels or bindings directly (other then configuring them via `@EnableBinding` annotation). However there may be +times, such as testing or other corner cases, when you do. + +Aside from generating channels for each binding and registering them as Spring beans, for each bound interface, Spring Cloud Stream generates a bean that implements the interface. +That means you can have access to the interfaces representing the bindings or individual channels by auto-wiring either in your application, as shown in the following two examples: + +_Autowire Binding interface_ + +[source, java] +---- +@Autowire +private Source source + +public void sayHello(String name) { + source.output().send(MessageBuilder.withPayload(name).build()); +} +---- + +_Autowire individual channel_ + +[source, java] +---- +@Autowire +private MessageChannel output; + +public void sayHello(String name) { + output.send(MessageBuilder.withPayload(name).build()); +} +---- + +You can also use standard Spring's `@Qualifier` annotation for cases when channel names are customized or in multiple-channel scenarios that require specifically named channels. + +The following example shows how to use the @Qualifier annotation in this way: + +[source, java] +---- +@Autowire +@Qualifier("myChannel") +private MessageChannel output; +---- + [[spring-cloud-stream-overview-producing-consuming-messages]] -==== Producing and Consuming Messages +=== Producing and Consuming Messages -You can write a Spring Cloud Stream application by using either Spring Integration annotations or Spring Cloud Stream's `@StreamListener` annotation. -The `@StreamListener` annotation is modeled after other Spring Messaging annotations (such as `@MessageMapping`, `@JmsListener`, `@RabbitListener`, and so on) but adds content type management and type coercion features. +You can write a Spring Cloud Stream application by using either Spring Integration annotations or Spring Cloud Stream native annotation. -===== Native Spring Integration Support +==== Spring Integration Support -Because Spring Cloud Stream is based on Spring Integration, Stream completely inherits Integration's foundation and infrastructure as well as the component itself. -For example, you can attach the output channel of a `Source` to a `MessageSource`, as follows: +Spring Cloud Stream is built on the concepts and patterns defined by http://www.enterpriseintegrationpatterns.com/[Enterprise Integration Patterns] and relies +in its internal implementation on an already established and popular implementation of Enterprise Integration Patterns within the Spring portfolio of projects: +https://projects.spring.io/spring-integration/[Spring Integration] framework. + +So its only natiural for it to support the foundation, semantics, and configuration options that are already established by Spring Integration + +For example, you can attach the output channel of a `Source` to a `MessageSource` and use the familiar `@InboundChannelAdapter` annotation, as follows: [source, java] ---- @EnableBinding(Source.class) public class TimerSource { - @Value("${format}") - private String format; - @Bean - @InboundChannelAdapter(value = Source.OUTPUT, poller = @Poller(fixedDelay = "${fixedDelay}", maxMessagesPerPoll = "1")) + @InboundChannelAdapter(value = Source.OUTPUT, poller = @Poller(fixedDelay = "10", maxMessagesPerPoll = "1")) public MessageSource timerMessageSource() { - return () -> new GenericMessage<>(new SimpleDateFormat(format).format(new Date())); + return () -> new GenericMessage<>("Hello Spring Cloud Stream"); } } ---- -Similarly, you can use a processor's channels in a transformer, as follows: +Similarly, you can use @Transformer or @ServiceActivator while providing an implementation of a message handler method for a _Processor_ binding contract, as shown in the following example: [source,java] ---- @@ -476,16 +442,15 @@ public class TransformProcessor { } ---- -NOTE: It is important to understand that, when you consume from the same binding by using `@StreamListener`, a pub-sub model is used. Each method annotated with `@StreamListener` receives its own copy of the message and each one has its own consumer group. -However, if you share a bindable channel as an input for `@Aggregator`, `@Transformer`, or `@ServiceActivator`, those consume in a competing model. No individual consumer group is created for each subscription. +NOTE: While this may be skipping ahead a bit, it is important to understand that, when you consume from the same binding using `@StreamListener` annotation, a pub-sub model is used. +Each method annotated with `@StreamListener` receives its own copy of a message, and each one has its own consumer group. +However, if you consume from the same binding by using one of the Spring Integration annotation (such as `@Aggregator`, `@Transformer`, or `@ServiceActivator`), those consume in a competing model. +No individual consumer group is created for each subscription. -===== Using @StreamListener for Automatic Content Type Handling +==== Using @StreamListener Annotation -Complementary to its Spring Integration support, Spring Cloud Stream provides its own `@StreamListener` annotation, modeled after other Spring Messaging annotations (`@MessageMapping`, `@JmsListener`, `@RabbitListener`, and others). -The `@StreamListener` annotation provides a simpler model for handling inbound messages, especially when dealing with use cases that involve content type management and type coercion. - -Spring Cloud Stream provides an extensible `MessageConverter` mechanism for handling data conversion by bound channels and for, in this case, dispatching to methods annotated with `@StreamListener`. -The following example shows an application that processes external `Vote` events: +Complementary to its Spring Integration support, Spring Cloud Stream provides its own `@StreamListener` annotation, modeled after other Spring Messaging annotations +(`@MessageMapping`, `@JmsListener`, `@RabbitListener`, and others) and provides conviniences, such as content-based routing and others. [source,java] ---- @@ -502,13 +467,9 @@ public class VoteHandler { } ---- -The distinction between `@StreamListener` and a Spring Integration `@ServiceActivator` is seen when considering an inbound `Message` that has a `String` payload and a `contentType` header of `application/json`. -In the case of `@StreamListener`, the `MessageConverter` mechanism uses the `contentType` header to parse the `String` payload into a `Vote` object. - As with other Spring Messaging methods, method arguments can be annotated with `@Payload`, `@Headers`, and `@Header`. -[NOTE] -==== + For methods that return data, you must use the `@SendTo` annotation to specify the output binding destination for data returned by the method, as shown in the following example: [source,java] @@ -526,21 +487,22 @@ public class TransformProcessor { } } ---- -==== -===== Using @StreamListener for Dispatching Messages to Multiple Methods -Since version 1.2, Spring Cloud Stream supports dispatching messages to multiple `@StreamListener` methods registered on an input channel, based on a condition. +==== Using @StreamListener for Content-based routing + +Spring Cloud Stream supports dispatching messages to multiple handler methods annotated with `@StreamListener` based on conditions. In order to be eligible to support conditional dispatching, a method must satisfy the follow conditions: * It must not return a value. * It must be an individual message handling method (reactive API methods are not supported). -The condition is specified by a SpEL expression in the `condition` attribute of the annotation and is evaluated for each message. +The condition is specified by a SpEL expression in the `condition` argument of the annotation and is evaluated for each message. All the handlers that match the condition are invoked in the same thread, and no assumption must be made about the order in which the invocations take place. -In the following example of a `@StreamListener` with dispatching conditions, all the messages bearing a header `type` with the value `bogey` are dispatched to the `receiveBogey` method, and all the messages bearing a header `type` with the value `bacall` are dispatched to the `receiveBacall` method. +In the following example of a `@StreamListener` with dispatching conditions, all the messages bearing a header `type` with the value `bogey` are dispatched to the +`receiveBogey` method, and all the messages bearing a header `type` with the value `bacall` are dispatched to the `receiveBacall` method. [source,java] ---- @@ -560,10 +522,46 @@ public static class TestPojoWithAnnotatedArguments { } ---- -NOTE: Dispatching through `@StreamListener` conditions is only supported for handlers of individual messages, not for reactive programming support (described spring-cloud-stream-overview-reactive-programming-support[later]). +*Content Type Negotiation in the Context of `condition`* + +It is important to understand some of the mechanics behind content-based routing using the `condition` argument of `@StreamListener`, especially in the context of the type of the message as a whole. +It may also help if you familiarize yourself with the <> before you proceed. + +Consider the following scenario: + +[source,java] +---- +@EnableBinding(Sink.class) +@EnableAutoConfiguration +public static class CatsAndDogs { + + @StreamListener(target = Sink.INPUT, condition = "payload.class.simpleName=='Dog'") + public void bark(Dog dog) { + // handle the message + } + + @StreamListener(target = Sink.INPUT, condition = "payload.class.simpleName=='Cat'") + public void purr(Cat cat) { + // handle the message + } +} +---- + +The preceding code is perfectly valid. It compiles and deploys without any issues, yet it never produces the result you expect. + +That is because you are testing something that does not yet exist in a state you expect. That is becouse the payload of the message is not yet converted from the +wire format (`byte[]`) to the desired type. +In other words, it has not yet gone through the type conversion process described in the <>. + +So, unless you use a SPeL expression that evaluates raw data (for example, the value of the first byte in the byte array), use message header-based expressions +(such as `condition = "headers['type']=='dog'"`). + + +NOTE: At the moment, dispatching through `@StreamListener` conditions is supported only for channel-based binders (not for reactive programming) +support. [[spring-cloud-streams-overview-using-polled-consumers]] -===== Using Polled Consumers +==== Using Polled Consumers When using polled consumers, you poll the `PollableMessageSource` on demand. Consider the following example of a polled consumer: @@ -656,12 +654,12 @@ boolean result = pollableSource.poll(received -> { ---- [[spring-cloud-stream-overview-error-handling]] -==== Error Handling +=== Error Handling Errors happen, and Spring Cloud Stream provides several flexible mechanisms to handle them. The error handling comes in two flavors: - * *application:* The error handling is done within the application (custom error handler). + * *application:* The error handling is done within the application (custom error handler). * *system:* The error handling is delegated to the binder (re-queue, DL, and others). Note that the techniques are dependent on binder implementation and the capability of the underlying messaging middleware. @@ -764,7 +762,7 @@ Depending on the capabilities of the messaging system such a system may _drop_ t Both Rabbit and Kafka support these concepts. However, other binders may not, so refer to your individual binder’s documentation for details on supported system-level error-handling options. -====== Drop +====== Drop Failed Messages By default, if no additional system-level configuration is provided, the messaging system drops the failed message. While acceptable in some cases, for most cases, it is not, and we need some recovery mechanism to avoid message loss. @@ -835,7 +833,7 @@ Payload {"name”:"Bob"} This effectively combines application-level and system-level error handling to further assist with downstream troubleshooting mechanics. -====== Re-queue +====== Re-queue Failed Messages As mentioned earlier, the currently supported binders (Rabbit and Kafka) rely on `RetryTemplate` to facilitate successful message processing. See <> for details. However, for cases when `max-attempts` property is set to 1, internal reprocessing of the message is disabled. At this point, you can facilitate message re-processing (re-tries) @@ -883,7 +881,7 @@ point you may want to provide your own instance of the `RetryTemplate`. To do so instance overrides the one provided by the framework. [[spring-cloud-stream-overview-reactive-programming-support]] -==== Reactive Programming Support +=== Reactive Programming Support Spring Cloud Stream also supports the use of reactive APIs where incoming and outgoing data is handled as continuous data flows. Support for reactive APIs is available through `spring-cloud-stream-reactive`, which needs to be added explicitly to your project. @@ -1038,164 +1036,6 @@ public static class HelloWorldEmitter { } ---- -[[spring-cloud-stream-overview-aggregation]] -==== Aggregation - -Spring Cloud Stream provides support for aggregating multiple applications together, connecting their input and output channels directly, and avoiding the additional cost of exchanging messages through a broker. -As of version 1.0 of Spring Cloud Stream, aggregation is supported only for the following types of applications: - -* Sources: Applications with a single output channel named `output`, typically having a single binding of the type `org.springframework.cloud.stream.messaging.Source`. -* Sinks: Applications with a single input channel named `input`, typically having a single binding of the type `org.springframework.cloud.stream.messaging.Sink`. -* Processors: Applications with a single input channel named `input` and a single output channel named `output`, typically having a single binding of the type `org.springframework.cloud.stream.messaging.Processor`. - -They can be aggregated together by creating a sequence of interconnected applications in which the output channel of an element in the sequence is connected to the input channel of the next element, if it exists. -A sequence can start with either a source or a processor, can contain an arbitrary number of processors, and must end with either a processor or a sink. - -Depending on the nature of the starting and ending elements, the sequence may have one or more bindable channels, as follows: - -* If the sequence starts with a source and ends with a sink, all communication between the applications is direct and no channels are bound. -* If the sequence starts with a processor, its input channel becomes the `input` channel of the aggregate and is bound accordingly. -* If the sequence ends with a processor, its output channel becomes the `output` channel of the aggregate and is bound accordingly. - -Aggregation is performed using the `AggregateApplicationBuilder` utility class, as shown in the next example. -Consider a project in which we have a source, a processor and a sink, all of which may be defined in the project or may be contained in one of the project's dependencies. - -NOTE: Each component (source, sink, or processor) in an aggregate application must be provided in a separate package if the configuration classes use `@SpringBootApplication`. -This requirement avoids cross-talk between applications, due to the classpath scanning performed by `@SpringBootApplication` on the configuration classes inside the same package. -In the next example, you can see that the `Source`, `Processor`, and `Sink` application classes are grouped in separate packages. -A possible alternative is to provide the source, sink, or processor configuration in a separate `@Configuration` class, avoid the use of `@SpringBootApplication`/`@ComponentScan`, and use those annotations for aggregation. - -The example consists of three classes in three packages, as follows: - -[source,java] ----- -package com.app.mysink; - -// Imports omitted - -@SpringBootApplication -@EnableBinding(Sink.class) -public class SinkApplication { - - private static Logger logger = LoggerFactory.getLogger(SinkApplication.class); - - @ServiceActivator(inputChannel=Sink.INPUT) - public void loggerSink(Object payload) { - logger.info("Received: " + payload); - } -} ----- - -[source,java] ----- -package com.app.myprocessor; - -// Imports omitted - -@SpringBootApplication -@EnableBinding(Processor.class) -public class ProcessorApplication { - - @Transformer(inputChannel = Processor.INPUT, outputChannel = Processor.OUTPUT) - public String loggerSink(String payload) { - return payload.toUpperCase(); - } -} ----- - -[source,java] ----- -package com.app.mysource; - -// Imports omitted - -@SpringBootApplication -@EnableBinding(Source.class) -public class SourceApplication { - - @InboundChannelAdapter(value = Source.OUTPUT) - public String timerMessageSource() { - return new SimpleDateFormat().format(new Date()); - } -} ----- - - -Each configuration can be used to run a separate component. -However, in this case, they can be aggregated together, as follows: - -[source,java] ----- -package com.app; - -// Imports omitted - -@SpringBootApplication -public class SampleAggregateApplication { - - public static void main(String[] args) { - new AggregateApplicationBuilder() - .from(SourceApplication.class).args("--fixedDelay=5000") - .via(ProcessorApplication.class) - .to(SinkApplication.class).args("--debug=true").run(args); - } -} ----- - -The starting component of the sequence is provided as an argument to the `from()` method. -The ending component of the sequence is provided as an argument to the `to()` method. -Intermediate processors are provided as an argument to the `via()` method. -Multiple processors of the same type can be chained together (for example, for pipelining transformations with different configurations). -For each component, the builder can provide runtime arguments for Spring Boot configuration. - -===== Configuring an Aggregate Application - -Spring Cloud Stream supports passing properties for the individual applications inside the aggregate application by using 'namespace' as a prefix. - -The `namespace` can be set for applications, as shown in the following example: - -[source,java] ----- -@SpringBootApplication -public class SampleAggregateApplication { - - public static void main(String[] args) { - new AggregateApplicationBuilder() - .from(SourceApplication.class).namespace("source").args("--fixedDelay=5000") - .via(ProcessorApplication.class).namespace("processor1") - .to(SinkApplication.class).namespace("sink").args("--debug=true").run(args); - } -} ----- - -Once the 'namespace' is set for the individual applications, the application properties with the `namespace` as prefix can be passed to the aggregate application by using any supported property source (command line, environment properties, and others). - -For instance, to override the default `fixedDelay` and `debug` properties of 'source' and 'sink' applications, you could use the following `java` command: - -[source] -java -jar target/MyAggregateApplication-0.0.1-SNAPSHOT.jar --source.fixedDelay=10000 --sink.debug=false - -===== Configuring Binding Service Properties for a Non-self-contained Aggregate Application - -The non-self-contained aggregate application is bound to an external broker with either or both of the inbound and outbound components (typically, message channels) of the aggregate application, while the applications inside the aggregate application are directly bound. -For example, a source application's output and a processor application's input are directly bound, while the processor's output channel is bound to an external destination at the broker. -When passing the binding service properties for non-self-contained aggregate application, it is required to pass the binding service properties to the aggregate application instead of setting them as 'args' to individual child application, as shown in the following example: - -[source,java] ----- -@SpringBootApplication -public class SampleAggregateApplication { - - public static void main(String[] args) { - new AggregateApplicationBuilder() - .from(SourceApplication.class).namespace("source").args("--fixedDelay=5000") - .via(ProcessorApplication.class).namespace("processor1").args("--debug=true").run(args); - } -} ----- - -Binding properties, such as `--spring.cloud.stream.bindings.output.destination=processor-output`, need to be specified as one of the external configuration properties (command line argument and so on). - [[spring-cloud-stream-overview-binders]] == Binders