我正在尝试建立一个多目标绑定,但是由于某些原因,来自第二个通道的消息将转到第一个exchange.queue
。例如:
spring:
cloud:
stream:
bindings:
output:
destination: exchange1
producer.requiredGroups: queue1
output-other:
destination: exchange2
producer.requiredGroups: queue2
我还使用org.springframework.cloud.stream.messaging.Source
作为默认输出,并为output-other
通道创建了专用的源绑定
public interface OtherSource {
String OUTPUT = "output-other";
@Output(OtherSource.OUTPUT)
MessageChannel output();
}
和生产者类
@EnableBinding(Source.class)
public class OutputSender {
private final Source source;
public void send(Output1 obj) {
Message message = toMessage(obj);
this.source.output().send(message);
}
}
这按预期工作。邮件被发送到正确的队列(exchange1.queue1
)
第二生产者:
@EnableBinding(OtherSource.class)
public class OutputOtherSender {
OtherSource source;
public void send(Output2 obj) {
Message message = toMessage(obj)
this.source.output().send(obj);
}
}
使用此设置的2个问题:
exchange2.queue2
未创建(application.yml配置有问题吗?)OtherSource
发送的exchange1.queue1
依赖项
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
答案 0 :(得分:1)
默认情况下,Spring Cloud Data Flow中的流应用程序是线性的,这意味着这些应用程序使用单个输出->单个输入相互绑定。
如果您希望流使用多个输入/输出目标,则必须手动配置绑定(使用Spring Cloud Stream属性),并将应用程序定义为app
类型-一种特殊的类型SCDF中的流应用程序,使用户可以手动配置绑定。
有关此的更多信息,您可以参考:https://dataflow.spring.io/docs/feature-guides/streams/stream-application-dsl/