мульти выходное связывание в потоке данных весеннего облака - PullRequest
1 голос
/ 02 июля 2019

Я пытаюсь настроить привязки к нескольким адресатам, но по какой-то причине сообщения со второго канала отправляются на первый 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, отправляются на exchange1.queue1

* 1033 зависимости *

<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 Ответ

1 голос
/ 03 июля 2019

По умолчанию потоковые приложения в Spring Cloud Data Flow являются линейными, то есть приложения связаны друг с другом, используя один выход -> один вход.

Если вы хотите, чтобы ваш поток использовал несколько входов /выходные пункты назначения, затем вам нужно вручную настроить привязки (используя свойства Spring Cloud Stream) и определить ваше приложение как тип app - особый тип для потокового приложения в SCDF, который позволяет пользователю настраивать привязки вручную.

Для получения дополнительной информации об этом вы можете обратиться: https://dataflow.spring.io/docs/feature-guides/streams/stream-application-dsl/

...