Kafka3.0.0版本——生产者回调异步发送消息 (API代码示例)

news/2024/11/30 6:01:14/

目录

    • 一、回调函数的异步发送消息概述
    • 二、生产者带回调函数的异步发送消息(API代码示例)
      • 2.1、pom文件导入依赖
      • 2.2、API代码
      • 2.3、在 kafka集群服务器上开启 Kafka 消费者

一、回调函数的异步发送消息概述

  • 回调函数会在 producer 收到 ack 时调用,为异步调用,该方法有两个参数,分别是元数据信息(RecordMetadata)和异常信息(Exception),如果 Exception 为 null,说明消息发送成功,如果 Exception 不为 null,说明消息发送失败。

二、生产者带回调函数的异步发送消息(API代码示例)

2.1、pom文件导入依赖

  • 依赖包

    <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.0.0</version></dependency>
    

2.2、API代码

  • 代码示例

  • 注:消息发送失败会自动重试,不需要我们在回调函数中手动重试。

    package com.xz.kafka.producer;import org.apache.kafka.clients.producer.*;
    import org.apache.kafka.common.serialization.StringSerializer;
    import java.util.Properties;/*** @author: xz* @since: 2023/4/2 14:10* @description: 生产者带回调函数的异步发送消息*/
    public class CustomProducerCallback {public static void main(String[] args) throws InterruptedException {//1、创建 kafka 生产者的配置对象Properties properties = new Properties();//2、给 kafka 配置对象添加配置信息:bootstrap.serversproperties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"192.168.136.27:9092,192.168.136.28:9092,192.168.136.29:9092");//3、指定对应的key和value的序列化类型 key.serializer value.serializerproperties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());//4、创建 kafka 生产者对象KafkaProducer<String, String> kafkaProducer = new KafkaProducer<>(properties);//5、调用 send 方法,发送消息for (int i = 0; i < 5; i++) {kafkaProducer.send(new ProducerRecord<>("news", "hello kafka" + i), new Callback() {@Overridepublic void onCompletion(RecordMetadata metadata, Exception exception) {if (exception == null){System.out.println("主题: "+metadata.topic() + " 分区: "+ metadata.partition());}}});Thread.sleep(2);}//6、关闭资源kafkaProducer.close();}
    }
    

2.3、在 kafka集群服务器上开启 Kafka 消费者

  • 在kafka集群某一台服务器上开启 Kafka 消费者

    [root@localhost kafka-3.0.0]# bin/kafka-console-consumer.sh  --bootstrap-server 192.168.136.27:9092 --topic news
    

    在这里插入图片描述

  • 观察开启 Kafka 消费者的服务器中是否接收到消息。如下图所示:
    在这里插入图片描述

  • 在 IDEA 控制台观察回调信息,控制台如下:
    在这里插入图片描述


http://www.ppmy.cn/news/39118.html

相关文章

LeetCode349_349. 两个数组的交集

LeetCode349_349. 两个数组的交集 一、描述 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[2…

为什么程序员都喜欢开源的软件?

程序员宝藏库&#xff1a;https://gitee.com/sharetech_lee/CS-Books-Store 商业软件&#xff1a;下载、安装、注册账号、登陆、看广告…费了半天功夫之后发现竟然收费&#xff01; 开源软件&#xff1a;开放透明、完全免费。 这么明显的对比&#xff0c;为啥不喜欢用开源软件…

One-YOLOv5 v1.2.0发布:支持分类、检测、实例分割

One-YOLOv5 v1.2.0正式发布。完整更新列表请查看链接&#xff1a;https://github.com/Oneflow-Inc/one-yolov5/releases/tag/v1.2.0&#xff0c;欢迎体验新版本&#xff0c;期待你的反馈。 1 新版本特性 1. 同步了Ultralytics YOLOv5的上游分支v7.0&#xff0c;同时支持分类、目…

都2023了,学习自动化测试还有必要么?会不会浪费我时间

最近收到不少小伙伴私信提问&#xff0c;其中问得比较多的就是“学习自动化测试有那么重要吗&#xff1f;”。 我的回答是肯定的——很重要。 相信不少同学都有诸如此类的疑问&#xff0c;例如&#xff1a;“日常工作中好像用不上自动化&#xff1f;”、“手工点点点好像也可…

该不该放弃嵌入式,单片机这条路?

本文几乎浓缩了我从业10几年的精华&#xff0c;内容涵盖我转行、打工、创业的经历。 建议从头到尾不要错过一字一句&#xff0c;因为字里行间的经验之谈&#xff0c;或许能成为你人生重要转折点。 全文3700多字&#xff0c;写了6个多小时&#xff0c;如果你赶时间&#xff0c;建…

《花雕学AI》04:尝鲜功能丰富且容易上手的AI绘画工具——Leonardo AI

偶然机缘&#xff0c;我接触到了另外一个AI绘画平台&#xff1a;Leonardo.AI 它是一个新的 AI 图像平台&#xff0c;其输出质量可与目前最火的Midjourney 相媲美&#xff0c;当然差距还是有的。其链接是https://leonardo.ai/&#xff0c;界面如下图。 我填写了电邮地址&#xf…

中华好诗词(八)

701、相传纪晓岚将哪首诗重新断句为“黄河远上白云一片&#xff0c;孤城万仞山&#xff0c;羌笛何须怨&#xff0c;杨柳春风&#xff0c;不度玉门关。”&#xff08;王之涣《凉州词》&#xff09; 702、台湾歌手周传雄演唱的《寂寞沙洲冷》&#xff0c;请问歌名是出自于哪首词…

博客4:YOLOv5车牌识别实战教程:模型优化与部署

摘要:本篇博客将详细介绍如何对YOLOv5车牌识别模型进行优化和部署。我们将讨论模型优化策略,如模型蒸馏、模型剪枝和量化等。此外,我们还将介绍如何将优化后的模型部署到不同平台,如Web、移动端和嵌入式设备等。 车牌识别视频 正文: 4.1 模型优化策略 在实际应用中,我们…