SpringBoot整合SpringKafka实现消费者史上最简代码实现
这是消费端的源码:https://github.com/xuebus/springkafkaconsumer
生产端的代码请求看另一篇博客:https://www.cnblogs.com/jun1019/p/7895746.html
该项目是使用的技术:SpringBoot + SpringKafka + Maven
先看pom.xml文件中引入的依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.xuebusi.consumer</groupId>
<artifactId>consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>springkafkaconsumer</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>1.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
注意:这里我使用的spring-kafka(它包装了apache的kafka-client)的依赖包版本是 1.0.6.RELEASE, 是因为我Linux服务器上部署的kafka服务器的版本是kafka_2.10-0.9.0.1,使用的kafka的时候要注意,kafka客户端(kafka-client)的版本要和kafka服务器的版本一一对应,否则,消息会消费失败。
Spring官方网站上给出了SpringKafka和kafka-client版本(它的版本号要和kafka服务器的版本保持一致)的对应关系:
https://projects.spring.io/spring-kafka/
下面是消费者的配置文件,既然使用的是SpringBoot,配置文件就是 application.yml:
server:
port: 8082
spring:
kafka:
consumer:
enable-auto-commit: true
group-id: applog
auto-offset-reset: latest
bootstrap-servers: 192.168.71.11:9092,192.168.71.12:9092,192.168.71.13:9092
在上面的配置中,我们给消费者分配的端口号是8082,服务器有3台,分别对应3个ip地址和端口。 并配置了kafka服务器的ip地址;
enable-auto-commit: true //指定消息被消费之后自动提交偏移量(即消息的编号,表示消费到了哪个位置,消费者每消费完一条消息就会向kafka服务器汇报自己消消费到的那个消息的编号,以便于下次继续消费)。
group-id: applog //消费者组
auto-offset-reset: latest //从最近的地方开始消费
想了解关于kafka消费者相关的更多配置的话,可以自行查阅相关资料进行学习。
下面是kafka消费者的核心代码,实现了消息的消费逻辑:
package com.xuebusi.consumer; import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component; /**
* 消费者
* 使用@KafkaListener注解,可以指定:主题,分区,消费组
*/
@Component
public class KafkaConsumer { @KafkaListener(topics = {"app_log"})
public void receive(String message){
System.out.println("app_log--消费消息:" + message);
}
}
在上面的代码中,负责消费消息的关键之处就是SpringKafka提供的@KafkaListener注解,在方法上使用该注解,并指定要消费的topic(也可以指定消费组以及分区号,支持正则表达式匹配),这样,消费者一旦启动,就会监听kafka服务器上的topic,实时进行消费消息。当然,我们可以在该类中定义多个不同的方法,并都在方法上使用 @KafkaListener ,为它指定不同的topic及分区信息,这样每个方法就相当于一个消费者了。
下面就启动SpringBoot项目测试:
package com.xuebusi; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class SpringkafkaconsumerApplication { public static void main(String[] args) {
SpringApplication.run(SpringkafkaconsumerApplication.class, args);
}
}
使用鼠标右键运行main方法即可启动SpringBoot项目,在控制台你会看到消费者会成功连接到kafka服务器,并打印出消费者的参数配置信息以及消费者和topic分区的分配信息,消费者一旦发现要消费的topic中有新的消息,就会立即进行消费。
SpringBoot整合SpringKafka实现消费者史上最简代码实现的更多相关文章
- SpringBoot整合SpringKafka实现生产者史上最简代码实现
该项目是使用的技术:SpringBoot + SpringKafka + Maven 先看pom.xml文件中引入的依赖: <?xml version="1.0" enco ...
- SpringBoot整合阿里云OSS文件上传、下载、查看、删除
1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...
- SpringBoot整合Fastdfs,实现图片上传(IDEA)
我们部署Fastdfs,就是为了实现文件的上传. 现在使用idea整合Fastdfs,实现图片上传 部署环境:Centos7部署分布式文件存储(Fastdfs) 利用Java客户端调用FastDFS ...
- python 穷举法 算24点(史上最简短代码)
本来想用回溯法实现 算24点.题目都拟好了,就是<python 回溯法 子集树模板 系列 -- 7.24点>.无奈想了一天,没有头绪.只好改用暴力穷举法. 思路说明 根据四个数,三个运算符 ...
- SpringBoot整合FastDFS实现图片的上传
文件的上传和预览在web开发领域是随处可见,存储的方式有很多,本文采用阿里巴巴余庆大神开发的FastDFS进行文件的存储,FastDFS是一个分布式文件存储系统,可以看我上一篇博文,有安装和配置教程 ...
- springboot整合项目-商城个人头像上传功能
上传头像的功能 持久层 1.sql语句的规划 avatar varchar(50) str - 字节流 将对象文件保存在操作系统上,然后在把这个文件的路径个记录下来,保存在avatar中,因为相比于字 ...
- SpringBoot整合Mybatis 使用generator自动生成实体类代码、Mapper代码、dao层代码
1.新建一个SpringBoot项目,并引入Mybatis和mybatis-generator相关的依赖. <dependency> <groupId>org.springfr ...
- Protobuf 语法 - 史上最简教程
Protobuf 语法简明教程 疯狂创客圈 死磕Netty 亿级流量架构系列之12 [博客园 总入口 ] 在protobuf中,协议是由一系列的消息组成的.因此最重要的就是定义通信时使用到的消息格式. ...
- 发布一个史上最简单代码最少Javascript Timer,解决一切定时执行的问题
这个函数实现如下 function TimerStart(func,delay) { var TimerID = window.setInterval( function() { if(!func() ...
随机推荐
- linux创建用户名密码等操作
转自: https://www.linuxidc.com/Linux/2017-06/144916.htm 与大家分享下Linux系统中创建用户.设置密码.修改用户.删除用户的命令,希望对你有所帮助. ...
- c++ 在控制台用 wcout输出宽字符的问题
在我的电脑上要想通过 std::wcout输出 宽字符 需加入以下代码 #include <io.h> #include <fcntl.h> void main() { _se ...
- unix环境高级编程 读书笔记
1.上班业余时间把书下载下来,第一章读完了,但是程序只能回家运行啦!Fighting!
- Linux下网卡混杂模式设置和取消
工作中发现一个网卡工作状态不对了,查看了一下,发现这个网卡和正常工作的网卡 信息不一样,它显示的居然是混杂模式,而正常工作的是 running 模式 ,所以来了解下混杂模式怎么取消... 下文来自 ...
- Windbg使用方法
hgy413的专栏 http://blog.csdn.net/hgy413/article/category/1143065
- HDU 3820 Golden Eggs (SAP | Dinic)
Golden Eggs Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER 解决方案
主要是由于调试的环境中已有一个同名的Provider存在. 解决方法是修改AndroidManifest.xml中的 <provider android:name=".apps.App ...
- golang学习笔记 ---命令行参数
os 包以跨平台的方式,提供了一些与操作系统交互的函数和变量.程序的命令行参数可从os包的Args变量获取:os包外部使用os.Args访问该变量. os.Args变量是一个字符串(string)的切 ...
- LINUX-vmstat命令讲解
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况. 一般vmstat工具的使用是通过两个 ...
- php开启与关闭错误提示
windows系统开关php错误提示 如果不具备修改php.ini的权限,可以将如下代码加入php文件中: 代码如下 复制代码 ini_set("display_errors", ...