2017-10-18 325 views
1

我正在使用spring-cloud-stream:1.3.0.RELEASE,spring-cloud-stream-binder-kafka:1.3.0.RELEASE進行spring引導應用程序的工作。我使用spring integration dsl來分割文件和beanio中的行,將行轉換爲json,要求將成功的json消息寫入kafka主題,並將錯誤消息寫入不同的kafka主題。以下是application.yml中的配置。使用spring雲流向錯誤通道發送錯誤消息

spring: 
    cloud: 
    stream: 
     kafka: 
     binder: 
      autoAddPartitions: true 
     bindings.webmarketbasket: 
     destination: webmarketbasket 
     group: usproductrecommendationsgroup 
     producer: 
      partitionCount: 5 
      errorChannelEnabled: true 
     bindings.webmarketbasket.errors: 
     destination: webmarketbasketerrors 
     group: usproductrecommendationsgroup 
     producer: 
      partitionCount: 5 
     bindings.error: 
     destination: errorchannel 
     group: usproductrecommendationsgroup 
     producer: 
      partitionCount: 5 

我在春天的雲流 - 粘合劑 - 卡夫卡注意到pull請求https://github.com/spring-cloud/spring-cloud-stream/pull/1039:1.3.0.RELEASE,當errorChannelEnabled設置爲true它創建PublishSubscribeChannel,還存在哪些檢查是否豆是一個測試用例爲製作者錯誤頻道創建。

當我在我的應用程序http://localhost:8195/beans中檢查彈簧執行器url時,會創建「errorChannel」全局錯誤通道bean,但不會創建「webmarketbasket.errors」bean。當出現「org.springframework.messaging.MessageHandlingException」時,錯誤消息被髮送到「errorchannel」kafka主題並停止處理文件中剩餘的行。卡夫卡話題「webmarketbasketerrors」從未被創造。你能幫忙,請讓我知道我是否遺漏了任何東西。

回答

0

你似乎混淆了兩件事。

Spring Integration Error Channel Support適用於當您要發佈某些內容到全球errorChannel,該全球通過spring.cloud.stream.bindings.error.destination=myErrors綁定到目的地時。

new support in 1.3爲每個監聽者創建一個錯誤通道;它是pub/sub,它被橋接到全球errorChannel。因此,該消息也將發佈到...bindings.error.destination(如果已配置;在您的情況下,目標稱爲errorChannel)。專用錯誤通道的bean名稱是webmarketbasket. usproductrecommendationsgroup.errors。框架沒有綁定到該頻道的kafka話題。

如果您想自己處理錯誤,則可以從專用或全局錯誤通道使用。

+0

謝謝加里。我試着用「webmarketbasket.usproductrecommendationsgroup.errors」。但是仍然沒有創建專用錯誤通道的bean名稱。它看起來像組僅添加到了消費者而不是AbstractMessageChannelBinder.java中的生產者。 – mariappan

+0

我通過'@Output(「webmarketbasket.errors」)爲專用錯誤通道添加了一個子通道 \t SubscribableChannel webMarketBasketErrorChannel();',bean名稱「webmarketbasket.errors」被創建並創建了kafka主題。但錯誤消息不會發送到「webmarketbasket.errors」主題,錯誤消息只發送到全局錯誤通道。 – mariappan

+0

這不會幫助;框架中沒有任何內容知道該頻道;請重新閱讀我的答案。 –