简单域 class 基于 Spring Kafka 集成

Simple domain class-based Spring Kafka integration

我正在 Spring Boot 框架中构建一组微服务,每个微服务都与 Kafka 集成以进行消息传递。似乎有 3 个独立但相关的 Spring 库提供 Kafka 集成:

我的目标是抽象出底层消息传递系统的细节,并为我的微服务提供一个简单的消息传递服务层来发送和接收消息。我希望此服务层与我的域 类 (POJO) 一起工作,而不是让微服务与构建 Message 实例有关。例如:

public interface MyMessagingService {

    void send(MyPojo obj);

    MyPojo receive();
}

其次,我想添加 Avro 支持,但首先我会使用 JSON。

切入正题,似乎有多种方法可以实现这一点,这非常令人困惑,尤其是在有各种可用的 Spring 库的情况下。我可以为我的微服务提供这样一个共享消息传递层的最直接的方法是什么,它们只需要关心域 类?

我从 Spring 集成中遇到 @MessagingGateway 看起来很有前途,但这似乎与发送和回复语义有关,我的服务不会期待来自卡夫卡

我看过的示例(下面有一些链接)似乎仍然必须自己构造 Message 实例。有更简单的方法吗?

如果您的 ".. 目标是抽象出底层消息系统的细节,并为我的微服务提供一个简单的消息服务层来发送和接收消息",那么为什么不直接使用 spring-cloud-stream?

代码开发人员甚至不必知道 he/she 编写的代码将成为某些消息系统的一部分。例如,

@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 云流应用程序,(在 Kafka binder 的上下文中)将从 "input" 主题接收并发送到 "output" 主题的值这是通过 uppercase(..) 函数传递的。

是的,JSON、Avro 等

的类型转换都是透明地为您处理的

当然有一些细节,但是当你有更具体的问题时,我们当然可以讨论它们。现在我建议先完成一些 reference documentation