SpringCloud 應(yīng)用錯(cuò)誤處理

2023-11-26 16:16 更新

有兩種類型的應(yīng)用程序級(jí)錯(cuò)誤處理。可以在每個(gè)綁定訂閱中處理錯(cuò)誤,或者全局處理程序可以處理所有綁定訂閱錯(cuò)誤。讓我們查看詳細(xì)信息。

圖29.1 具有自定義和全局錯(cuò)誤處理程序的Spring Cloud Stream接收器應(yīng)用程序

自定義與全局錯(cuò)誤通道

對(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è)方便的選擇。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)