Простая интеграция Spring Kafka на основе классов домена - PullRequest
0 голосов
/ 07 июня 2019

Я создаю набор микросервисов в среде Spring Boot, каждый из которых интегрируется с Kafka для обмена сообщениями.Кажется, есть 3 отдельные, но связанные библиотеки Spring, предлагающие интеграцию Kafka:

Моя цель состоит в том, чтобы абстрагироваться от деталей базовой системы обмена сообщениями и обеспечить простой уровень службы обмена сообщениями для моих микросервисов для отправки и получения сообщений.Мне бы хотелось, чтобы этот уровень обслуживания работал с моими классами доменов (POJO) и не имел бы микросервисов, связанных с созданием Message экземпляров.Например:

public interface MyMessagingService {

    void send(MyPojo obj);

    MyPojo receive();
}

Во-вторых, я хотел бы добавить поддержку Avro, но сначала я заставлю ее работать с JSON.

Чтобы перейти к погоне, кажется, что есть несколько способовдостижения этого, что очень запутанно, особенно с различными доступными библиотеками Spring.Каким самым простым способом я могу предоставить такой общий уровень обмена сообщениями для своих микросервисов, где они должны заниматься только классами домена?

Я встречал @MessagingGateway из Spring Integration, которая выглядела многообещающе,но кажется, что это связано с отправкой и ответом семантики, и мои службы не будут ожидать ответного сообщения от Kafka.

Примеры, на которые я смотрел, некоторые из которых приведены ниже, по-прежнему, похоже, создают сообщениесами случаи.Есть ли более простой способ сделать это?

1 Ответ

1 голос
/ 07 июня 2019

Если ваша "... Цель состоит в том, чтобы абстрагироваться от деталей базовой системы обмена сообщениями и предоставить моим микросервисам простой уровень службы обмена сообщениями для отправки и получения сообщений" , то почему бы просто не использовать spring-облако-поток?

Разработчик кода даже не должен знать, что код, который он / она пишет, будет частью некоторой системы сообщений.Например,

@SpringBootApplication
public class SampleStreamApplication  {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SampleStreamApplication.class);
    }

    @Bean
    public Function<String, String> uppercase() {
        return value -> value.toUpperCase();
    }
}

Вышеприведенное является полным и полностью работающим приложением Spring Cloud Stream, которое (в контексте связующего Kafka) получит из темы «input» и отправит в тему «output» значение, котороебыла передана через функцию uppercase(..).

Да, преобразование типов прозрачно выполняется для вас как для JSON, Avro и т. д.

Очевидно, что есть некоторые детали, но мы, безусловно, можем обсудить их, когда выесть более конкретные вопросы.Теперь я бы предложил сначала пройти справочную документацию .

...