推荐文章
1,引入jar
build.gradle 添加以下引用
compile group: 'org.springframework.kafka', name: 'spring-kafka', version: '2.4.4.RELEASE'
2,配置
application.yml 添加一下配置
spring:
kafka:
bootstrap-servers: 127.0.0.1:9092
#生产者的配置,大部分我们可以使用默认的,这里列出几个比较重要的属性
producer:
#每批次发送消息的数量
batch-size: 16
#允许重试次数。大于0允许重试将潜在的改变数据的顺序。
retries: 0
#key序列化方式
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
#消费者的配置
consumer:
#Kafka中没有初始偏移或如果当前偏移在服务器上不再存在时,默认区最新 ,有三个选项 【latest, earliest, none】
auto-offset-reset: latest
#是否开启自动提交
enable-auto-commit: true
#自动提交的时间间隔
auto-commit-interval: 100
#key,value的解码方式
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer、
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
3,生产者
MsgSender 消息发送接口
public interface MsgSender {
/**
* 发送消息
*
* @param data 消息信息
* @param topic 主题
*/
void sendMessage(String topic, Object data);
}
MsgSenderKafka 消息发送的kafka实现
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Slf4j
@Component
public class MsgSenderKafka implements MsgSender {
@Resource
private KafkaTemplate kafkaTemplate;
@Override
public void sendMessage(String topic, Object data) {
kafkaTemplate.send(topic, data);
log.info("发送MQ成功:message={}", JSON.toJSONString(data));
}
}
OrderProducer 订单发送消息
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@Service
public class OrderProducer {
@Resource
private MsgSender msgSender;
public void createOrder() {
Map<String, Object> orderInfo = new HashMap<>();
orderInfo.put("orderId", UUID.randomUUID().toString());
orderInfo.put("price", 10000);
orderInfo.put("description", "我是注册订单,请尽快处理");
msgSender.sendMessage("ORDER", orderInfo);
}
}
4,消费者
OrderConsumer 消费订单消息
/**
* @author qizenan
* @date 2020-9-9
**/
@Slf4j
@Component
public class OrderConsumer {
@KafkaListener(topics = {"ORDER"})
public void listen(ConsumerRecord record) {
log.info("收到消息,topic:{}, partition:{}, body:{}", record.topic(), record.partition(),
JSON.toJSONString(record.value()));
Map<Integer, Object> orderInfo = (Map<Integer, Object>) record.value();
log.info("订单信息 orderInfo = {} ", orderInfo.toString());
}
}