spring框架集成kafka生产和消费的实战场景

近年来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生产和消费的原理,敬请期待!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寅灯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值