SpringBoot整合Kafka

本文详细介绍如何在SpringBoot项目中整合Kafka消息中间件,包括配置依赖、实体类定义、消息生产和消费实现,以及测试过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringBoot整合Kafka

Kafka是当前较为流行的消息中间件,具有提供消息的持久化、高吞吐量 、支持通过Kafka服务器和消费机集群来分区消息、支持Hadoop并行数据加载等特点,被广泛用在企业级开发中。SpringBoot为当前Spring推出的敏捷开发框架,简化了Spring的样式化配置,使开发人员从模式化的配置文件中解放出来,专注于业务逻辑的开发。因此本文将当前流行的SpringBoot与消息中间件Kafka进行整合。

主要工程目录结构如下:

一、配置pom文件引入依赖

 Kafka依赖:

<dependency>

            <groupId>org.springframework.kafka</groupId>

            <artifactId>spring-kafka</artifactId>

        </dependency>

阿里fastjson依赖:主要用来将发送的消息转换成json字符转,然后消费者在将其转换为javaBean对象

<dependency>

            <groupId>com.alibaba</groupId>

            <artifactId>fastjson</artifactId>

            <version>1.2.13</version>

        </dependency>

配置文件:

spring:

  kafka:

    bootstrap-servers: localhost:9092

    producer:

      key-serializer: org.apache.kafka.common.serialization.StringSerializer

      value-serializer: org.apache.kafka.common.serialization.StringSerializer

    consumer:

      group-id: test

      enable-auto-commit: true

      auto-commit-interval: 1000

      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer

      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

实体类

import java.io.Serializable;

/**
 * @Author: repator
 * @Date: 2019/8/16 11:14
 * @Description: 实体类
 **/
@Data
public class UserTest implements Serializable {
    private  String Name;
    private  String Email;
    private  String address;
    private int msgcode;
}
package com.lzh.domain;

import lombok.Data;

import java.io.Serializable;

/**
 * @Author: repator
 * @Date: 2019/8/16 14:36
 * @Description:
 **/
@Data
public class ResultData implements Serializable {
    private UserTest data;
}

消息生产者

package com.lzh.service;

import com.alibaba.fastjson.JSONObject;
import com.lzh.domain.UserTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;

/**
 * @Author: lizhihui
 * @Date: 2019/8/15 11:51
 * @Description:
 **/
@Component
public class MessageSender {
    @Autowired
    private KafkaTemplate kafkaTemplate;//kafka发送消息对象实例化

    public  void sendMessage(){
        UserTest userTest=new UserTest();//创建一个对象
        userTest.setAddress("安徽合肥");
        userTest.setEmail("address@163.com");
        userTest.setMsgcode(200);
        userTest.setName("Tom");
        JSONObject myjson=new JSONObject();//创建一个JSON
        myjson.put("data",userTest);//将对象装成json对象
        kafkaTemplate.send("nima",myjson.toJSONString());//发送json字符串,topic为nima
    }
}

消息消费者

package com.lzh.service;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.lzh.domain.ResultData;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
import org.apache.kafka.clients.consumer.ConsumerRecord;

import java.util.Optional;

/**
 * @Author: repator
 * @Date: 2019/8/15 11:53
 * @Description:
 **/
@Component
public class MessageReceive {
    @KafkaListener(topics = {"nima"})//topics的值必须为生产者指定的那个,可以订阅多个
    public  void receiveMessage(ConsumerRecord<?, ?> consumerRecord){
        Optional<?> kafkaMessage = Optional.ofNullable(consumerRecord.value());
        if(kafkaMessage.isPresent()){
            //得到Optional实例中的值
            Object message = kafkaMessage.get();
           ResultData ut=  JSON.parseObject(message.toString(),new TypeReference<ResultData>(){});//使用FasrJSON将json字符串转换成javabean对象
            System.out.println("这是kafka消息");
            System.out.println(ut.getData().getAddress());//控制台打印对象信息
            System.out.println(ut.getData().getEmail());
            System.out.println(ut.getData().getMsgcode());
            System.out.println(ut.getData().getName());
        }


    }
}

测试controller

package com.lzh.Controller;


import com.lzh.service.MessageSender;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author: lizhihui
 * @Date: 2019/8/15 14:55
 * @Description:
 **/
@RestController
public class testcntroller {
    @Autowired
    private MessageSender messageSender;
      @RequestMapping("test")
    public  String testkafa(){

          messageSender.sendMessage();//调用消息生产者发送消息
          return "success";
      }
}

打开浏览器在地址栏输入:localhost:8080/test

看下控制台:生产者成功向kafka生产了消息,消费者已经成功得到消息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值