W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
如前所述,目標(biāo)綁定提供了外部消息傳遞系統(tǒng)與應(yīng)用程序提供的生產(chǎn)者和消費者之間的橋梁。
將@EnableBinding批注應(yīng)用于應(yīng)用程序的配置類之一可定義目標(biāo)綁定。@EnableBinding
注釋本身使用@Configuration
進(jìn)行元注釋,并觸發(fā)Spring Cloud Stream基礎(chǔ)結(jié)構(gòu)的配置。
下面的示例顯示了一個功能完整且運行正常的Spring Cloud Stream應(yīng)用程序,該應(yīng)用程序從INPUT
目標(biāo)接收的消息凈荷為String
類型(請參見,內(nèi)容類型協(xié)商部分),并將其記錄到控制臺,并將其轉(zhuǎn)換為大寫字母后將其發(fā)送到OUTPUT
目標(biāo)。
@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(); } }
如您所見,@EnableBinding
批注可以將一個或多個接口類作為參數(shù)。這些參數(shù)稱為綁定,它們包含表示可綁定組件的方法。這些組件通常是基于通道的活頁夾(例如Rabbit,Kafka等)的消息通道(請參見Spring消息傳遞)。但是,其他類型的綁定可以為相應(yīng)技術(shù)的本機功能提供支持。例如,Kafka Streams綁定器(以前稱為KStream)允許直接綁定到Kafka Streams(有關(guān)更多詳細(xì)信息,請參見Kafka Streams)。
Spring Cloud Stream已經(jīng)為典型的消息交換合同提供了綁定接口,其中包括:
public interface Sink { String INPUT = "input"; @Input(Sink.INPUT) SubscribableChannel input(); }
public interface Source { String OUTPUT = "output"; @Output(Source.OUTPUT) MessageChannel output(); }
public interface Processor extends Source, Sink {}
盡管前面的示例滿足了大多數(shù)情況,但是您也可以通過定義自己的綁定接口并使用@Input
和@Output
批注來標(biāo)識實際的可綁定組件,從而定義自己的合同。
例如:
public interface Barista { @Input SubscribableChannel orders(); @Output MessageChannel hotDrinks(); @Output MessageChannel coldDrinks(); }
將上一個示例中顯示的接口用作@EnableBinding
的參數(shù)將分別觸發(fā)三個綁定通道的創(chuàng)建,分別命名為orders
,hotDrinks
和coldDrinks
。
您可以根據(jù)需要提供任意數(shù)量的綁定接口,作為@EnableBinding
批注的參數(shù),如以下示例所示:
@EnableBinding(value = { Orders.class, Payment.class })
在Spring Cloud Stream中,可綁定的MessageChannel
組件是Spring消息傳遞MessageChannel
(用于出站)及其擴展名SubscribableChannel
(用于入站)。
可輪詢的目標(biāo)綁定
盡管前面描述的綁定支持基于事件的消息使用,但是有時您需要更多控制,例如使用率。
從2.0版開始,您現(xiàn)在可以綁定可輪詢的使用者:
以下示例顯示了如何綁定可輪詢的使用者:
public interface PolledBarista { @Input PollableMessageSource orders(); . . . }
在這種情況下,PollableMessageSource
的實現(xiàn)綁定到orders
“通道”。有關(guān)更多詳細(xì)信息,請參見第29.3.5節(jié)“使用輪詢的使用者”。
自定義頻道名稱
通過使用@Input
和@Output
批注,可以為該通道指定自定義的通道名稱,如以下示例所示:
public interface Barista { @Input("inboundOrders") SubscribableChannel orders(); }
在前面的示例中,創(chuàng)建的綁定通道被命名為inboundOrders
。
通常,您不需要直接訪問各個通道或綁定(除非通過@EnableBinding
注釋對其進(jìn)行配置)。但是,您有時可能會遇到諸如測試或其他極端情況的情況。
除了為每個綁定生成通道并將其注冊為Spring beans外,對于每個綁定接口,Spring Cloud Stream還會生成一個實現(xiàn)該接口的bean。這意味著您可以通過在應(yīng)用程序中自動接線來訪問表示綁定或各個通道的接口,如以下兩個示例所示:
自動接線綁定界面
@Autowire private Source source public void sayHello(String name) { source.output().send(MessageBuilder.withPayload(name).build()); }
自動連線個別頻道
@Autowire private MessageChannel output; public void sayHello(String name) { output.send(MessageBuilder.withPayload(name).build()); }
對于自定義通道名稱或在需要特別命名通道的多通道方案中,您也可以使用標(biāo)準(zhǔn)Spring的@Qualifier
批注。
下面的示例演示如何以這種方式使用@Qualifier批注:
@Autowire @Qualifier("myChannel") private MessageChannel output;
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: