W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
有兩種類型的應(yīng)用程序級錯誤處理。可以在每個綁定訂閱中處理錯誤,或者全局處理程序可以處理所有綁定訂閱錯誤。讓我們查看詳細信息。
對于每個輸入綁定,Spring Cloud Stream創(chuàng)建具有以下語義<destinationName>.errors
的專用錯誤通道。
<destinationName>
由綁定的名稱(例如input
)和組的名稱(例如myGroup
)組成。
考慮以下:
spring.cloud.stream.bindings.input.group=myGroup
@StreamListener(Sink.INPUT) // destination name 'input.myGroup' public void handle(Person value) { throw new RuntimeException("BOOM!"); } @ServiceActivator(inputChannel = Processor.INPUT + ".myGroup.errors") //channel name 'input.myGroup.errors' public void error(Message<?> message) { System.out.println("Handling ERROR: " + message); }
在前面的示例中,目標(biāo)名稱為input.myGroup
,專用錯誤通道名稱為input.myGroup.errors
。
@StreamListener批注的使用專門用于定義橋接內(nèi)部通道和外部目標(biāo)的綁定。假設(shè)目標(biāo)特定錯誤通道沒有關(guān)聯(lián)的外部目標(biāo),則該通道是Spring Integration(SI)的特權(quán)。這意味著必須使用SI處理程序注釋之一(即@ ServiceActivator,@ Transformer等)定義用于此類目標(biāo)的處理程序。
如果未指定
group
,則使用匿名組(類似于input.anonymous.2K37rb06Q6m2r51-SPIDDQ
),這不適用于錯誤處理方案,因為在創(chuàng)建目標(biāo)之前,您不知道它將是什么。
另外,如果您綁定到現(xiàn)有目的地,例如:
spring.cloud.stream.bindings.input.destination=myFooDestination spring.cloud.stream.bindings.input.group=myGroup
完整的目標(biāo)名稱為myFooDestination.myGroup
,然后專用錯誤通道名稱為myFooDestination.myGroup.errors
。
回到例子...
預(yù)訂名為input
的通道的handle(..)
方法會引發(fā)異常。給定錯誤通道input.myGroup.errors
的訂閱者,所有錯誤消息均由該訂閱者處理。
如果您有多個綁定,則可能需要一個錯誤處理程序。Spring Cloud Stream 通過將每個單獨的錯誤通道橋接到名為errorChannel
的通道來自動提供對全局錯誤通道的支持,從而允許單個訂閱者處理所有錯誤,如以下示例所示:
@StreamListener("errorChannel") public void error(Message<?> message) { System.out.println("Handling ERROR: " + message); }
如果錯誤處理邏輯相同,則與哪個處理程序產(chǎn)生錯誤無關(guān),這可能是一個方便的選擇。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: