如何在SCDF中向两个不同的输出通道发送消息?

时间:2017-03-07 15:09:54

标签: spring-cloud-stream spring-cloud-dataflow

我有一个源,它通过默认的output频道将消息发送到流中的处理器。现在我想通过不同的频道发送失败消息。

我想我应该创建一个从Source扩展的可绑定接口,并使用@Output添加额外的通道。如何确保SCDF实际为此频道创建Kafka主题? IOW,流定义会是什么样的?

E.g。

的内容

source | processor | sink source > error-sink

source | processor使用常规output频道/ Kafka主题,source > error-sink使用其他频道/主题。

1 个答案:

答案 0 :(得分:1)

如果需要跟踪下游处理的错误消息,则可以使用与Spring Cloud Stream关联的OOTB DLQ机制。 RabbitKafka都支持此功能。您可以在Spring Cloud Data Flow(SCDF)中启用DLQ作为global setting或基于每个流。

如果您喜欢定义自定义渠道以便以不同方式处理邮件,则您必须创建类似于此sample的自定义界面。

在SCDF中部署流时,您可以分别通过spring.cloud.stream.kafka.bindings.<channelName>.producerspring.cloud.stream.kafka.bindings.<channelName>.consumer绑定属性覆盖生产者和消费者之间的目标。

修改

虽然有上述方法,但我从Spring Cloud Stream导致了解了一个更简单的解决方案(@ marius-bogoevici)。

已有一个可供使用的默认错误通道,而Spring Integration支持它。

这样,在您的应用中,您可以通过以下方式将自定义消息发送到默认错误频道:@Autowire @Qualifier("errorChannel")。事实上,这种支持可用于所有OOTB应用程序。

然后,您可以通过以下方式覆盖此错误频道的目的地:spring.cloud.stream.bindings.error.destination=errorchannel-test。在SCDF中,您可以在流媒体部署时通过:--properties传递此内容。

例如:

  

stream create foo --definition&#34; mysource |登录&#34;

     

stream deploy foo --properties&#34; app.mysource.spring.cloud.stream.bindings.error.destination = errorchannel-test&#34;