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:/ ...
随机推荐
- It is better to have the ability of fast learning
来自某位大佬: 内功=算法+数据结构+编译原理+操作系统原理+软件工程+英文 十足的自信心+强烈的求知欲+对Programming&&C&&CPP的执着+百折不挠的钻研 ...
- 蒲公英 · JELLY技术周刊 Vol.29: 前端智能化在阿里的那些事
蒲公英 · JELLY技术周刊 Vol.29 前端智能化是指借助于 AI 和机器学习的能力拓展前端,使其拥有一些超出现阶段前端能力的特性,这将是未来前端方向中一场重要的变革.目前各家互联网厂商都有自己 ...
- Tensorflow学习---argmax中axis问题
一:argmax中axis问题 https://blog.csdn.net/qq575379110/article/details/70538051/ 总之:axis=0/1不是行/列关系 test ...
- 解决IE9弹出json下载提示框
<!-- 开启注解 --> <mvc:annotation-driven> <mvc:message-converters> <bean class=&quo ...
- UnixIPC之共享内存
Unix-IPC之共享内存 一,共享内存的概念 共享内存通信技术是一种最快的可用IPC形式,它是针对其他通信机制运行效率低和设计的新型通信技术(其他的如:信号量,管道,套接字等).这种通信技术往往与其 ...
- 6.java设计模式之适配器模式
基本需求: 将一个220V的电压输出成5V的电压,其中220V电压为被适配者,变压器为适配器,5v电压为适配目标 基本介绍: 适配器模式属于结构型模式,将某个类的接口转换成客户端期望的另一个接口表示, ...
- Kafka架构深入:Kafka 工作流程及文件存储机制
kafka工作流程: 每个分区都有一个offset消费偏移量,kafka并不能保证全局有序性. Kafka 中消息是以 topic 进行分类的,生产者生产消息,消费者消费消息,都是面向 topic 的 ...
- python实现二叉树递归遍历与非递归遍历
一.中序遍历 前中后序三种遍历方法对于左右结点的遍历顺序都是一样的(先左后右),唯一不同的就是根节点的出现位置.对于中序遍历来说,根结点的遍历位置在中间. 所以中序遍历的顺序:左中右 1.1 递归实现 ...
- Quirc二维码识别模块
背景 师兄要用这个参加集赛,但是说自己C语言不太行,花了一个多小时帮他分析了一下(虽然自己也不太行). 对应模块的GitHub地址:https://github.com/dlbeer/quirc. 记 ...
- Cephfs的快照功能
前言 Cephfs的快照功能在官网都很少提及,因为即使开发了很多年,但是由于cephfs的复杂性,功能一直没能达到稳定,这里,只是介绍一下这个功能,怎么使用,并且建议不要在生产中使用,因为搞不好是会丢 ...