调用Springmvc接口发送kafka,如何设计接口返回值

项目提供controller接口,此接口用于发送一条消息到kafka队列中。

目前采用同步发送的方式,当发送成功后,接口返回成功响应。

问题: 如果采用异步方式,接口如何返回?如果在调用异步发送后,接口就直接返回,那么客户端如何知道此条消息发送的成功与否?

调用controller 接口发送kafka消息,如何编码,才能保证消息发送成功与失败都能得到处理,并作为返回值返回给客户端?

阅读 3.5k
2 个回答

异步写入可以设置回调函数获取写入数据的metadata信息,是否写入异常等等,然后在进行相关操作。

kakfa produce java api 调用以下send方法,在服务端响应 该produce 请求后就会回调onCompletion方法。

 ProducerRecord<byte[],byte[]> record = new ProducerRecord<byte[],byte[]>("the-topic", key, value);
 producer.send(myRecord,
               new Callback() {
                   public void onCompletion(RecordMetadata metadata, Exception e) {
                       if(e != null)
                           e.printStackTrace();
                       System.out.println("The offset of the record we just sent is: " + metadata.offset());
                   }
               });

异步发送肯定不能同步返回,否则整体视为同步代码,失去异步的意义,异步一般会通过回调的方式来执行相应的逻辑,Kafka异步发送会异步成功或失败回调,在回调中处理业务逻辑,而调用方(客户端)也必须支持异步处理。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题