Spring Cloud数据流中的多输出绑定

时间:2019-07-02 14:24:07

标签: spring spring-boot spring-cloud spring-cloud-dataflow

我正在尝试建立一个多目标绑定,但是由于某些原因,来自第二个通道的消息将转到第一个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个问题

  1. exchange2.queue2未创建(application.yml配置有问题吗?)
  2. 使用OtherSource发送的
  3. 消息将转到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>

1 个答案:

答案 0 :(得分:1)

默认情况下,Spring Cloud Data Flow中的流应用程序是线性的,这意味着这些应用程序使用单个输出->单个输入相互绑定。

如果您希望流使用多个输入/输出目标,则必须手动配置绑定(使用Spring Cloud Stream属性),并将应用程序定义为app类型-一种特殊的类型SCDF中的流应用程序,使用户可以手动配置绑定。

有关此的更多信息,您可以参考:https://dataflow.spring.io/docs/feature-guides/streams/stream-application-dsl/