淮安做网站需要多少钱,北京市城市建设档案馆网站,专做奢侈品品牌的网站,wordpress rss 采集目录
写在前面
一、创建maven项目
二、引入依赖
2.1、maven项目创建完成后#xff0c;需要引入以下依赖
2.2、创建工程目录
三、创建生产者
3.1、创建生产者#xff0c;同步发送消息
3.2、创建生产者#xff0c;异步发送消息
四、同步发送消息和异步发送消息的区别…目录
写在前面
一、创建maven项目
二、引入依赖
2.1、maven项目创建完成后需要引入以下依赖
2.2、创建工程目录
三、创建生产者
3.1、创建生产者同步发送消息
3.2、创建生产者异步发送消息
四、同步发送消息和异步发送消息的区别
五、报错处理思路 写在前面 该文章通过spring只实现消息的简单发送不实现消息的监听。
一、创建maven项目 创建maven过程不再赘述。
二、引入依赖
2.1、maven项目创建完成后需要引入以下依赖 // kafka 依赖dependencygroupIdorg.apache.kafka/groupIdartifactIdkafka-clients/artifactIdversion3.4.0/version/dependency// json依赖,demo中可能会用到该依赖,与kafka依赖无关dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion2.0.10/version/dependency
2.2、创建工程目录 三、创建生产者
3.1、创建生产者同步发送消息 3.1.1、在MyProducer中实现如下代码
package com.demo.lxb.kafka;import com.alibaba.fastjson.JSON;
import com.demo.lxb.entiry.Order;
import org.apache.kafka.clients.producer.*;
import org.apache.kafka.common.serialization.StringSerializer;import java.util.Properties;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;/*** Description:* Author: lvxiaobu* Date: 2023-10-23 17:06**/
public class MyProducer {private final static String TOPIC_NAME topic0921;public static void main(String[] args) throws ExecutionException, InterruptedException {Properties props new Properties();// 一、设置参数// 配置kafka地址//props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,192.168.151.28:9092); // 单机配置props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,192.168.151.28:9092,192.168.151.28:9092,192.168.151.28:9092); // 集群配置// 配置消息 键值的序列化规则props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());// 二、声明消息对象// 未指定发送分区具体撒送分区的计算公式 hash(key)%PartitionNum// 创建发送的消息: producerRecord// 参数1: 要发送的主题// 参数2: 消息的key值,可有可无,如果存在的话,该字段用来带入分区的计算公式// 参数3: value,具体的消息的内容,json格式的字符串ProducerRecordString,String producerRecord new ProducerRecordString, String(TOPIC_NAME,mykey,hello-kafka);// 三、声明消息发送者ProducerString,String producer new KafkaProducerString,String(props);// 开发发送,并返回结果和元数据RecordMetadata recordMetadata producer.send(producerRecord).get();System.out.println(发送消息结果: topic- recordMetadata.topic() | partition- recordMetadata.partition() | offset- recordMetadata.offset());}
}执行main方法结果如下 如果多次执行main方法会发现offset偏移量的数字会发生变化。
3.2、创建生产者异步发送消息 3.2.1、在MyProducer2中实现如下代码
package com.demo.lxb.kafka;import org.apache.kafka.clients.producer.*;
import org.apache.kafka.common.serialization.StringSerializer;import java.util.Properties;
import java.util.concurrent.ExecutionException;/*** Description: kafka 异步发送消息* Author: lvxiaobu* Date: 2023-10-23 17:06**/
public class MyProducer2 {private final static String TOPIC_NAME topic0921;public static void main(String[] args) throws ExecutionException, InterruptedException {Properties props new Properties();// 一、设置参数// 配置kafka地址
// props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,
// 192.168.151.28:9092); // 单机配置props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,192.168.154.128:9092,192.168.154.128:9093,192.168.154.128:9094); // 集群配置// 配置消息 键值的序列化规则props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());// 二、声明消息对象// 未指定发送分区具体撒送分区的计算公式 hash(key)%PartitionNum// 创建发送的消息: producerRecord// 参数1: 要发送的主题// 参数2: 消息的key值,可有可无,如果存在的话,该字段用来带入分区的计算公式// 参数3: value,具体的消息的内容,json格式的字符串ProducerRecordString,String producerRecord new ProducerRecordString, String(TOPIC_NAME,mykey,hello-kafka2);// 三、声明消息发送者ProducerString,String producer new KafkaProducerString,String(props);// 异步发送消息,通过callback回调函数获取发送结果producer.send(producerRecord, new Callback() {public void onCompletion(RecordMetadata recordMetadata, Exception e) {if(e ! null){System.out.println(消息发送失败: e);}if(recordMetadata ! null){System.out.println(发送消息结果: topic- recordMetadata.topic() | partition- recordMetadata.partition() | offset- recordMetadata.offset());}}});Thread.sleep(50000L);}
}执行 Main方法会产生和同步发送消息一样的结果。
说明Thread.sleep(50000L)是让主线程休眠50s否则主线程在异步发送了消息以后就直接结束了不会再输出callback中的输出语句
四、同步发送消息和异步发送消息的区别
消息的同步发送 如果生产者发送的消息没有收到kafka的ack通知生产者会产生阻塞如果阻塞了3s仍然没有收到消息反馈会进行消息发送的重试操作重试的次数是3次。如果三次以后还不行代码将抛出异常消息的异步发送 生产者发送消息后会提供一个callback的回调方法callback会获取消息是否发送成功的结果。但是需要注意异步发送消息会出现消息的丢失。
五、报错处理思路 3.2.1、检查Props配置Kafka地址是否正确 3.2.2、检查Linux是否关闭防火墙