我们使用KafkaTemplate.send(String data)这个方法发送消息到Kafka中,显然这个方法并不能满足我们系统的需求,
那我们需要查看一下KafkaTemplate所实现的接口,看看还提供了什么方法。
当我们发送消息到Kafka后,我们又怎么去确认消息是否发送成功呢?这就涉及到KafkaTemplate的发送回调方法了。接下来我们开始正式讲解。
1. 查看发送接口
首先我们Ctrl+鼠标左键进入KafkaTemplate的源代码中查看一下,可以看到有关发送的接口如下。
这里的参数还是比较简单的,值得一提的事,方法中有个Long类型的时间戳(timestamp)参数,这是Kafka0.10版本提供的新功能,
主要用来使用时间索引进行查询数据以及日志切分清除策略。还有一个ProducerRecord参数,这个类其实就是整合了topic、partition、data等数据的消费实体类。
topic:这里填写的是Topic的名字
partition:这里填写的是分区的id,其实也是就第几个分区,id从0开始。表示指定发送到该分区中
timestamp:时间戳,一般默认当前时间戳
key:消息的键
data:消息的数据
ProducerRecord:消息对应的封装类,包含上述字段
Message>:Spring自带的Message封装类,包含消息及消息头
ListenableFuture>sendDefault(V data);
ListenableFuture>sendDefault(K key, V data);
ListenableFuture>sendDefault(Integer partition, K key, V data);
ListenableFuture>sendDefault(Integer partition, Long timestamp, K key, V data);
ListenableFuture>send(String topic, V data);
ListenableFuture>send(String topic, K key, V data);
ListenableFuture>send(String topic, Integer partition, K key, V data);
ListenableFuture>send(String topic, Integer partition, Long timestamp, K key, V data);
ListenableFuture> send(ProducerRecordrecord);
ListenableFuture> send(Message> message);
View Code
2. 使用sendDefault发送消息
首先在KafkaConfiguration编写一个带有默认Topic参数的KafkaTemplate,同时为另外一个KafkaTemplate加上@Primary注解,
@Primary注解的意思是在拥有多个同类型的Bean时优先使用该Bean,到时候方便我们使用@Autowired注解自动注入。
//这个是我们之前编写的KafkaTemplate代码,加入@Primary注解
@Bean
@Primarypublic KafkaTemplatekafkaTemplate() {
KafkaTemplate template= new KafkaTemplate(producerFactory());returntemp