Spring boot Spring云数据流| Rabbit MQ交换未被占用

Spring boot Spring云数据流| Rabbit MQ交换未被占用,spring-boot,spring-cloud,spring-cloud-stream,spring-rabbit,spring-cloud-dataflow,Spring Boot,Spring Cloud,Spring Cloud Stream,Spring Rabbit,Spring Cloud Dataflow,我很确定我遗漏了一些基本的东西: 我已使用此拓扑创建了一个流: A | B | C 这是应用程序的application.properties: spring.cloud.stream.bindings.requestChannel.destination=events-exchange 这是B的application.properties: spring.cloud.stream.bindings.input.destination=events-exchange C是一个OOTB日志接收

我很确定我遗漏了一些基本的东西:

我已使用此拓扑创建了一个流:

A | B | C

这是应用程序的application.properties:

spring.cloud.stream.bindings.requestChannel.destination=events-exchange
这是B的application.properties:

spring.cloud.stream.bindings.input.destination=events-exchange
C是一个OOTB日志接收器应用程序

在这种设置下,A | B可以,但C不会得到任何日志。虽然B将消息传递给正确的交换,但来自B | C的链接是不相交的

请注意,我在部署期间没有提供上述属性。它们是jar中的静态application.properties


我应该如何让SCDF正确加入应用程序?这方面的最佳实践/推荐方法是什么?我们有许多应用程序需要使用Rabbit中间件加入,并寻找一种更简单、更不容易出错的方法。谢谢。

如果您将B的输出设置为
work.out
,那么您也需要覆盖C的输入。SpringCloudDataFlow所做的是将相邻应用程序的输入和输出都设置为一个公共值(从流/应用程序名称派生)。如果您正在覆盖其中一个应用程序,应用程序将断开连接,正如您所注意到的。虽然我们确实打算在将来以更好的方式支持覆盖中间目的地,
a | B | C
依赖于放弃对
input/output
到Spring云数据流的绑定的控制(您可以覆盖它,但正如您所注意到的,您需要在两端都显式)。作为中途重命名目的地的替代方法,您可以使用命名的目的地:。

嗨,B的
出站
和C的
入站
的绑定目的地是什么。给定,C是OOTB日志应用程序,日志的
spring.cloud.stream.bindings.input.destination
是否指向与B的输出相同的
exchange
(通过
spring.cloud.stream.bindings..destination
被绑定到?B的出站是:
spring.cloud.stream.bindings.output.destination=work.out
C是否有
spring.cloud.stream.bindings.stream.output.destination=work.out
我没有为“C”应用了任何部署时属性。顺便说一句,如果我不提供这些属性中的任何一个,SCDF是否会根据streamName|u appName约定自动加入它们?提供太多的属性(或道具文件本身),这会定义序列,尽管DSL读取a | B | C,但感觉有点难以跟踪。这里的最佳做法是什么?