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:/ ...
随机推荐
- 如何做可靠的分布式锁,Redlock真的可行么
本文是对 Martin Kleppmann 的文章 How to do distributed locking 部分内容的翻译和总结,上次写 Redlock 的原因就是看到了 Martin 的这篇文章 ...
- .net 之json 一般处理程序
<%@ WebHandler Language="C#" Class="read" %> using System; using System.We ...
- Sublime Text 3 安装插件与快捷键总结
ublime Text 3 是一个了不起的软件.首先,它是一个干净,实用,可以快速的编写代码编辑器.它不仅具有令人难以置信的内置功能(多行编辑和VIM模式),而且还支持插件,代码片段和其他许多东西.很 ...
- 第05组 Alpha冲刺 (3/6)(组长)
.th1 { font-family: 黑体; font-size: 25px; color: rgba(0, 0, 255, 1) } #ka { margin-top: 50px } .aaa11 ...
- 链路层输出 -qdisc
二层发送中,实现qdisc的主要函数是__dev_xmit_skb和net_tx_action,本篇将分析qdisc实现的原理,仅对框架进行分析. 其框架如下图所示 qdisc初始化 pktsched ...
- 用system v消息队列实现回射客户/服务器程序
客户端程序 #include<unistd.h> #include<sys/types.h> #include<sys/socket.h> #include< ...
- 开发工具之Git(二)
目录 四.Git安装与配置 (一)安装 (二)配置 (三)创建仓库 五.Git基本命令 六.Git分支 上一篇讲了Git的基本原理,建议没看过的同学先看看,然后这次我们来讲Git的具体操作和指令. 四 ...
- 常见mysql后台线程
1.IO THREAD MySQL有很多后台线程 其中包括了负责IO的相关线程IO THREAD 1. 参数innodb_write_io_threads 写线程 默认四个,负责数据块的写入 2 ...
- linux文件描述符、软硬连接、输入输出重定向
引用链接:https://blog.csdn.net/qq769651718/article/details/79459346 文件描述符的作用: 文件描述符是linux操作系统中特有的概念.其相当于 ...
- NO.A.0004——Git私有服务器部署/makefile方式/本地与Git服务器代码交换
一.在linux服务器上搭建私有Git服务程序:make编译方式 远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改.GitHub就是一个免费托管开源代码的远程仓库.但是对于某 ...