Rus*_*tov 3 java rest apache-kafka spring-boot spring-kafka
我正在学习 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());
}
Run Code Online (Sandbox Code Playgroud)
和消费者,将 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);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 spring-kafka 和 spring-boot。Rest api 有两种方法:POST - 保存 myObject Get - 通过 id 返回保存的对象。可以用 kafka 还是我必须直接连接这个微服务?谢谢你。
不确定我是否完全理解您的问题,但是如果您想向 kafka 发送消息,并等待该消息被某个微服务使用和处理,然后该微服务将向您发送消息的发送者返回一些信息(主键)如果不向您的架构添加更多内容,就无法做到这一点。
发送到 kafka 的消息是“即发即弃”,从发送者的角度来看,您对这条消息会发生什么一无所知(如果、何时、多久以及有多少消费者将消费它。)
在您的场景中,消费者微服务还可以使用另一个 kafka 主题中的主键发送消息,如果您需要该信息,您可以使用这些消息。
请记住,Kafka 用于解耦您的架构并引入异步消息处理,如果您需要同步获得来自消费者的响应,您可能使用了错误的解决方案。
| 归档时间: |
|
| 查看次数: |
1405 次 |
| 最近记录: |