【问题标题】:It is possible to return custom data to Kafka Producer可以将自定义数据返回给 Kafka Producer
【发布时间】:2023-03-04 07:07:05
【问题描述】:

我正在学习 kafka,我想将我的应用拆分为 2 个微服务。 首先将来自 KafkaConsumer 的所有传入消息保存到数据库并通过给定的 id 选择实体。 其次提供 REST api 来保存和获取实体。 他们之间的交互由 kafka 提供。 如何使用 kafka 从 REST api 中的 db 接收存储的 ID? 这是调用 POST 请求的生产者的示例代码。

 public void sendToKafka(MyObject myobject) throws ExecutionException, InterruptedException {
    LOGGER.info("sending payload='{}' to topic='{}'", myobject, myTopic);
    byte[] bytes = parseObjectToByte(myobject);
    ListenableFuture<SendResult<String, byte[]>> resultFuture = kafkaTemplate.send(topicSave, bytes);
    SendResult<String, byte[]> result = resultFuture.get();
    LOGGER.info(result.toString());
}

和消费者,将 myObject 保存到数据库

@KafkaListener(topics = "${kafka.topic.mytopic}")
public void saveMyObject(byte[] value) {
    MyObject myobject = parseToMyObject(value);
    LOGGER.info("received myobject='{}'", myobject);
    MyObject myobjectSaved = myObjectRepository.insert(myobject);
}

我正在使用带有 spring-boot 的 spring-kafka。 Rest api 有两种方法: POST - 保存 myObject Get - 通过 id 返回保存的对象。 有可能用 kafka 做,还是我必须直接连接这个微服务?谢谢。

【问题讨论】:

    标签: java rest spring-boot apache-kafka spring-kafka


    【解决方案1】:

    不确定我是否完全理解您的问题,但如果您想向 kafka 发送消息,并等待该消息被某个微服务使用和处理,然后该微服务会将一些信息(主键)返回给如果不向架构中添加更多内容,您将无法做到这一点。

    发送到 kafka 的消息是“即发即弃”,从发送者的角度来看,您对这条消息会发生什么一无所知(如果、何时、多久以及有多少消费者会消费它。)

    在您的场景中,消费者微服务还可以使用另一个 kafka 主题中的主键发送消息,如果您需要该信息,您可以使用这些消息。

    请记住,Kafka 用于解耦您的架构并引入异步消息处理,如果您需要同步地从消费者那里获得响应,那么您可能使用了错误的解决方案。

    【讨论】:

      猜你喜欢
      • 2020-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多