Для целей вашего вопроса вы можете рассматривать Spring-Cloud-Stream как абстракцию более высокого уровня по сравнению с более низкоуровневыми API, такими как spring-kafka (если используется связыватель kafka), spring-интеграция et c. Другими словами, вам не нужно ни отправлять, ни получать что-либо явно в рамках фреймворка. Это сделает отправку и получение для вас; Это основная особенность фреймворка - привязать выполнение вашего кода к адресам ввода и вывода, которыми управляет ваш брокер. Все, что вам нужно сделать для вашего дела, это произвести Message
. Например, вот полностью работающее приложение
@SpringBootApplication
public static class SupplierConfiguration {
@Bean
public Supplier<String> stringSupplier() {
return () -> "Hello from Supplier";
}
}
. Пока все, что вы сделали, это создало String, фреймворк поместит его в Message и отправит его в Kafka (при условии, что вы используете связыватель Kafka). Если вам необходимо явно контролировать значение ключа, вы можете вернуть фактический экземпляр сообщения с установленным значением kafka_messageKey
. Например;
@SpringBootApplication
public static class SupplierConfiguration {
@Bean
public Supplier<Message<?>> stringSupplier() {
return () -> MessageBuilder.withPayload("Hello from Supplier")
.setHeader(KafkaHeaders.MESSAGE_KEY, "blah")
.build();
}
}
Подробнее об этом можно прочитать здесь
Также обратите внимание, что мы отходим от модели программирования на основе аннотаций и переходим к гораздо более простой функциональная модель.