文档章节

springboot和kafka集成

啊哈关关
 啊哈关关
发布于 2017/09/06 21:23
字数 430
阅读 130
收藏 0

1.pom.xml文件

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
    <version>1.2.2.RELEASE</version>
</dependency>

2.发送方的配置

package com.test.frame.kafka.configuration;

import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.common.serialization.StringSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.annotation.EnableKafka;
import org.springframework.kafka.core.DefaultKafkaProducerFactory;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.core.ProducerFactory;
import org.springframework.kafka.support.converter.StringJsonMessageConverter;

import java.util.HashMap;
import java.util.Map;

/**
 * created by guanguan on 2017/9/6
 **/
@Configuration
@EnableKafka
public class KafkaProducerConfiguration {

    @Value("${kafka.bootstrap_servers}")
    private String bootstrapServers;


    @Bean
    public Map<String, Object> producerConfigs() {
        Map<String, Object> props = new HashMap<>();
        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        return props;
    }


    @Bean
    public ProducerFactory<String,String> producerFactory(){
        return new DefaultKafkaProducerFactory<String,String>(producerConfigs());
    }


    @Bean
    public KafkaTemplate<String,?> kafkaTemplate(){
       
        KafkaTemplate<String, String> template = new KafkaTemplate<>(producerFactory());
        //设置后可以传送实体
        template.setMessageConverter(new StringJsonMessageConverter());
        return template;    }


    @Bean
    public Producer producer(){
        return  new Producer();
    }

}

3.消费者方的配置

package com.test.frame.kafka.configuration;

import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.annotation.EnableKafka;
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
import org.springframework.kafka.core.ConsumerFactory;
import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
import org.springframework.kafka.support.converter.StringJsonMessageConverter;

import java.util.HashMap;
import java.util.Map;

/**
 * created by guanguan on 2017/9/6
 **/
@Configuration
@EnableKafka
public class KafkaConsumerConfiguration {


    @Value("${kafka.bootstrap_servers}")
    private String bootstrapServers;

    @Bean
    public Map<String, Object> consumerConfigs() {
        Map<String, Object> props1 = new HashMap<>();
        props1.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
        props1.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        props1.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        props1.put(ConsumerConfig.GROUP_ID_CONFIG, "jd-group");  //统一在一个组内

        return props1;

    }


    @Bean
    public ConsumerFactory<String, String> consumerFactory() {
        return new DefaultKafkaConsumerFactory<String, String>(consumerConfigs());
    }


    @Bean
    public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory() {
        ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(consumerFactory());
        factory.setMessageConverter(new StringJsonMessageConverter());
        return factory;
    }

}

4.发送

package com.test.frame.kafka.configuration;

import com.test.frame.kafka.model.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.support.KafkaHeaders;
import org.springframework.messaging.support.MessageBuilder;

/**
 * created by guanguan on 2017/9/6
 **/

public class Producer {
    private static final Logger logger = LoggerFactory.getLogger(Producer.class);


    @Value("${kafka.topic}")
    private String topic;

    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;




    public void sendMessage(User payload) {
        kafkaTemplate
                .send(MessageBuilder.withPayload(payload).setHeader(KafkaHeaders.TOPIC, topic).build());
        logger.info("send message=> "+payload.toString());

    }


}

5.接收

package com.test.frame.kafka.configuration;

import com.test.frame.kafka.model.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

/**
 * created by guanguan on 2017/9/6
 **/
@Component
public class Consumer {

    private static final Logger logger = LoggerFactory.getLogger(Consumer.class);


    @KafkaListener(topics = "${kafka.topic}")
    public void recvMessage(User user) {

        logger.info("recv msg:=> " + user.toString());
    }
}

6.测试:

package com.test.frame.kafka.controller;


import com.test.frame.kafka.configuration.Producer;
import com.test.frame.kafka.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/")
public class ApiController {

    @Autowired
    Producer producer;


    @RequestMapping("/")
    public String testkafka(@RequestParam String test) {
        User user = new User();
        user.setName("hh");
        producer.sendMessage(user);

        return "send kafak ok!";
    }

}

表明已经接收成功。

application.yml文件




kafka:
  bootstrap_servers: localhost:9092
  topic: test-topic

 

© 著作权归作者所有

啊哈关关
粉丝 8
博文 176
码字总数 77974
作品 0
深圳
程序员
私信 提问
Kafka java.lang.OutOfMemoryError: Direct buffer memory

SpringBoot集成Kafka,发送消息时,总是抛错:java.lang.OutOfMemoryError: Direct buffer memory 请大佬们帮忙看看! 个人尝试在kafka-run-class.sh中添加过“-XX:MaxDirectMemorySize=512...

Gannalyo
2018/10/26
67
4
springboot整合kafka应用

1、kafka在消息传递的使用非常普遍,相对于activemq来说kafka的分布式管理和使用更加灵活。 2、activemq的搭建和使用可以参考:   activemq搭建和springmvc的整合:http://www.cnblogs.co...

小不点丶
2017/11/09
0
0
SpringBootBucket 2.0.4 发布,代号“傲娇的小二晶”

SpringBootBucket 自从1.0.0版本发布后就有好多人喜欢,目前码云上面star数量接近1.2k。上个月还收到了红薯签名的1000 star奖杯,这个我自己也觉得很惊讶。 由于SpringBoot 1.x官方将终止维护...

一刀
2018/09/16
1K
4
SpringBootBucket 1.0.0 发布,SprintBoot 全家桶

Spring Boot 现在已经成为Java 开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。 本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通过“一...

一刀
2018/03/05
7.3K
17
Spring Boot 全家桶 - SpringBootBucket

Spring Boot 现在已经成为Java 开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。 本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通过“一...

一刀
2018/03/05
0
1

没有更多内容

加载失败,请刷新页面

加载更多

Linus 本尊来了!为什么 KubeCon 越来越火?

阿里妹导读: 从200人的小会议到3500 多位云原生和开源领域工程师齐聚一堂的大会,KubeCon 只用了四年,昨天,在KubeCon China 2019 上阿里巴巴宣布开源 OpenKruise,今天,Linus 本尊竟然现...

阿里云云栖社区
37分钟前
1
0
五小时构建云原生电商平台 | KubeCon SOFAStack Workshop 详解

本文根据 KubeCon China 2019 同场活动 SOFAStack Cloud Native Workshop 内容整理, 文末包含文档、PPT 地址,欢迎试用和提出建议。 2019 年 6 月 25 日,在 KubeCon China 2019,全球知名开...

SOFAStack
38分钟前
4
0
跨平台开发框架DevExtreme v19.1.4正式发布|附下载

DevExtreme Complete Subscription是性能最优的 HTML5,CSS 和 JavaScript 移动、Web开发框架,可以直接在Visual Studio集成开发环境,构建iOS,Android,Tizen和Windows Phone 8应用程序。D...

FILA6666
39分钟前
2
0
数据库链接断开 Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

报错信息如下: Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureThe last packet successfully received from the server was 97,130 mill......

为了美好的明天
46分钟前
3
0
Flutter for Web 详细预研

背景 Google在最新的Google I/O上推出了Flutter for Web,旨在进一步解决一次代码,多端运行的问题。Flutter for Web还处于早期试验版,官方不建议在生产环境上使用。那么到底它的实际情况怎...

阿里云官方博客
48分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部