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