近年来kafka作为消息中间件很流行,业务接口使用可以起削峰填谷的作用,日志场景中可以接收日志的直接输入,用起来甚是方便,今天和大家分享springboot框架中业务接口的实战场景:
1、pom文件引入jar
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
2、配置文件中配置kafka信息
spring:
kafka:
producer:
bootstrap-servers: 172.10.8.65:9092,172.10.8.66:9092
batch-size: 10089
buffer-memory: 2048
key-serializer: com.nandao.service.kafka.serialization.ObjectSerializer
value-serializer: com.nandao.service.kafka.serialization.ObjectSerializer
consumer:
bootstrap-servers: 172.10.8.65:9092,172.10.8.66:9092
enable-auto-commit: true
auto-offset-reset: earliest
group-id: 0
key-deserializer: com.nandao.service.kafka.serialization.ObjectSerializer
value-deserializer: com.nandao.service.kafka.serialization.ObjectSerializer
topic:
log: applog-nd
3、定时任务生产消息
import com.nandao.demo.common.KafkaSendHelper;
import com.nandao.demo.entity.UserInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
* @author wanghuainan
* @date 2021/9/8
*/
@Component
@Slf4j
public class CommonArticleTask {
@Autowired
private KafkaSendHelper kafkaSendHelper;
@Scheduled(cron = "0 0/5 * * * ? ")
public void run() {
UserInfo article = new UserInfo();
article.setAge("12");
article.setName("nandao");
article.setContent("好文章啊");
//发送文章到Kafka消息队列
kafkaSendHelper.sendLogsMessage(article);
}
}
当然业务场景也可以是在业务接口中触发,不一定是定时任务。
4、发送信息的工具类
import com.alibaba.fastjson.JSON;
import com.nandao.demo.entity.UserInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;
/**
* @author nandao
* kafka发送帮助类
*/
@Component
@Slf4j
public class KafkaSendHelper {
@Value("${spring.kafka.topic.log}")
private String logTopic;
@Autowired
private KafkaTemplate kafkaTemplate;
/**
* 日志消息发送到kafka
* @param data
*/
public void sendLogsMessage(UserInfo data) {
log.info("send log 来源:{} 标题 = {} topic:[{}]", data.getName(), data.getAge(),logTopic);
kafkaTemplate.send(logTopic, JSON.toJSON(data));
}
}
5、kafka监听消费
/**
* @author wanghuainan
* @date 2021/9/8
*/
@Component
@Slf4j
public class LogConsume {
/**
* 日志消费
* @param message
*/
@KafkaListener(topics = {"${spring.kafka.topic.log}"})
public void receiveArticle(JSONObject message) {
//获取Kafka中文章的数据
log.info("日志消费[{}]",message);
}
}
监听消费有多种形式,后期我们会一一分享。
到此,基本应用场景已经分享完成,后期给大家分享kafka生产和消费的原理,敬请期待!