Spring Boot系列 八、集成Kafka
一、引入依赖
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.4.0.RELEASE</version>
</dependency>
二、编写配置文件
spring:
application: kafka
kafka:
bootstrap-servers: ip:9092
producer:
retries: 1
batch-size: 16384
buffer-memory: 1024000
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
consumer:
enable-auto-commit: true
auto-commit-interval: 10
auto-offset-reset: earliest
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
三、注入生产者
@Configuration
public class ProductorConfiugutration { @Value("${spring.kafka.bootstrap-servers}")
private String server;
@Value("${spring.kafka.producer.buffer-memory}")
private Integer bufferMemory;
@Value("${spring.kafka.producer.batch-size}")
private Integer batchSize;
@Value("${spring.kafka.producer.retries}")
private int retries;
@Value("${spring.kafka.producer.key-serializer}")
private String keySerializer;
@Value("${spring.kafka.producer.value-serializer}")
private String valueSerlializer; @Bean("peopleTemplate")
public KafkaTemplate<String, String> getPeopleTemplate() {
KafkaTemplate<String, String> peopleTemple = new KafkaTemplate<String, String>(getFactory());
peopleTemple.setDefaultTopic("topic.people");
return peopleTemple;
} public ProducerFactory getFactory() {
return new DefaultKafkaProducerFactory(getProductorConfig());
} public Map<String, Object> getProductorConfig() {
Map<String, Object> hashMap = new HashMap<String, Object>();
hashMap.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, server);
hashMap.put(ProducerConfig.BUFFER_MEMORY_CONFIG, bufferMemory);
hashMap.put(ProducerConfig.BATCH_SIZE_CONFIG, batchSize);
hashMap.put(ProducerConfig.RETRIES_CONFIG, retries);
hashMap.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,keySerializer);
hashMap.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,valueSerlializer);
return hashMap;
}
}
四、注入消费者
@Configuration
public class ConsumerConfiguration { @Value("${spring.kafka.consumer.enable-auto-commit}")
private boolean autoCommit;
@Value("${spring.kafka.consumer.auto-commit-interval}")
private String interval;
@Value("${spring.kafka.consumer.auto-offset-reset}")
private String rest;
@Value("${spring.kafka.consumer.key-deserializer}")
private String keyDeserializer;
@Value("${spring.kafka.consumer.value-deserializer}")
private String valueDeserializer;
@Value("${spring.kafka.bootstrap-servers}")
private String server; @Bean("userConsumer")
public KafkaConsumer<String,String> getUserConsumer(){
List<String> topic=new ArrayList<String>();
topic.add("topic.people");
KafkaConsumer<String,String> userConsumner=new KafkaConsumer<String, String>(getConfig());
userConsumner.subscribe(topic);
return userConsumner;
} public ConsumerFactory<String,String> getFaactory() {
return new DefaultKafkaConsumerFactory(getConfig());
} public Map<String, Object> getConfig() {
Map<String, Object> hashMap = new HashMap<String, Object>();
hashMap.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, server);
hashMap.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, rest);
hashMap.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, interval);
hashMap.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, autoCommit);
hashMap.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, keyDeserializer);
hashMap.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, valueDeserializer);
hashMap.put(ConsumerConfig.GROUP_ID_CONFIG,"2");
return hashMap;
}
}
五、发送消息和消费消息
@RestController
public class KafkaController { @Resource
KafkaTemplate<String,String> peopleTemplate; @Resource
KafkaConsumer<String,String> userConsumer; @RequestMapping("/send")
public String sendMessage(){ People people = new People();
people.setAddress("北京通州");
people.setAge(24);
people.setName("小白");
people.setSex(1);
String jsonString = JSON.toJSONString(people);
peopleTemplate.sendDefault(jsonString); return "发送成功";
} @RequestMapping("getmesssage")
public String getMessage(){ ConsumerRecords<String, String> message= userConsumer.poll(100); for(ConsumerRecord<String,String> msg:message){
System.out.println(msg.value());
} return "获取消息";
}
}
结果

本文简单粗暴,爱看不看
Spring Boot系列 八、集成Kafka的更多相关文章
- Spring Boot系列——如何集成Log4j2
上篇<Spring Boot系列--日志配置>介绍了Spring Boot如何进行日志配置,日志系统用的是Spring Boot默认的LogBack. 事实上,除了使用默认的LogBack ...
- spring boot(十八)集成FastDFS文件上传下载
上篇文章介绍了如何使用Spring Boot上传文件,这篇文章我们介绍如何使用Spring Boot将文件上传到分布式文件系统FastDFS中. 这个项目会在上一个项目的基础上进行构建. 1.pom包 ...
- Spring Boot 2 (八):Spring Boot 集成 Memcached
Spring Boot 2 (八):Spring Boot 集成 Memcached 一.Memcached 介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数 ...
- Spring Boot(十八):使用Spring Boot集成FastDFS
Spring Boot(十八):使用Spring Boot集成FastDFS 环境:Spring Boot最新版本1.5.9.jdk使用1.8.tomcat8.0 功能:使用Spring Boot将文 ...
- Spring Boot系列——7步集成RabbitMQ
RabbitMQ是一种我们经常使用的消息中间件,通过RabbitMQ可以帮助我们实现异步.削峰的目的. 今天这篇,我们来看看Spring Boot是如何集成RabbitMQ,发送消息和消费消息的.同时 ...
- Spring Boot 系列总目录
一.Spring Boot 系列诞生原因 上学那会主要学的是 Java 和 .Net 两种语言,当时对于语言分类这事儿没什么概念,恰好在2009年毕业那会阴差阳错的先找到了 .Net 的工作,此后就开 ...
- Spring Boot 系列教程9-swagger-前后端分离后的标准
前后端分离的必要 现在的趋势发展,需要把前后端开发和部署做到真正的分离 做前端的谁也不想用Maven或者Gradle作为构建工具 做后端的谁也不想要用Grunt或者Gulp作为构建工具 前后端需要通过 ...
- spring boot / cloud (八) 使用RestTemplate来构建远程调用服务
spring boot / cloud (八) 使用RestTemplate来构建远程调用服务 前言 上周因家里突发急事,请假一周,故博客没有正常更新 RestTemplate介绍: RestTemp ...
- 国内最全的Spring Boot系列之二
历史文章 <国内最全的Spring Boot系列之一> 视频&交流平台 SpringBoot视频:http://t.cn/R3QepWG Spring Cloud视频:http:/ ...
随机推荐
- xshell连接windows10子系统ubuntu
修改端口 cd /etc/ssh#备份sudo cp sshd_config sshd_config.baksudo vim sshd_config修改sshd_config Port 2233 #修 ...
- 想springboot启动完成后执行某个方法
如题,很多时候,我们都需要在springboot项目启动后初始化化一些自己的数据 原文地址:https://www.jianshu.com/p/f80f833ab8f6 实现方法有2个. 一.Appl ...
- Prometheus安装配置
一.什么是Prometheus? Prometheus受启发于Google的Brogmon监控系统(相似的Kubernetes是从Google的Brog系统演变而来),从2012年开始由前Google ...
- C++ 数据结构 4:排序
1 基本概念 1.1 定义 排序是计算机内经常进行的一种操作,其目的是将一组"无序"的数据元素调整为"有序"的数据元素. 1.2 数学定义 假设含n个数据元素的 ...
- 力扣 - 146. LRU缓存机制
目录 题目 思路 代码 复杂度分析 题目 146. LRU缓存机制 思路 利用双链表和HashMap来解题 看到链表题目,我们可以使用头尾结点可以更好进行链表操作和边界判断等 还需要使用size变量来 ...
- Js中函数声明和函数表达式的区别
先看以下几段烧脑的代码: f();//=>? var f = function () { console.log("var"); } function f() { conso ...
- maven安装配置及其在IDEA和eclipse开发软件中配置
1.maven下载安装 1.1.前往https://maven.apache.org/download.cgi下载最新版的Maven程序: 1.2.解压到本地,并配置环境变量 (1)path中添加 ( ...
- 爬虫练习之正则表达式爬取猫眼电影Top100
#猫眼电影Top100import requests,re,timedef get_one_page(url): headers={ 'User-Agent':'Mozilla/5.0 (Window ...
- 双数组字典树(Double Array Trie)
参考文献 1.双数组字典树(DATrie)详解及实现 2.小白详解Trie树 3.论文<基于双数组Trie树算法的字典改进和实现> DAT的基本内容介绍这里就不展开说了,从Trie过来的同 ...
- Python_自动化测试_项目
<论坛自动化测试项目> 1.自行选择合适的社区 2.功能要求 5个以上,不包含登录页 3.多手动测试 多用selenium IDE 4.生成测试报告,发送邮件 5.计划任务定时完成 6 ...