spring整合kafka实例

来源:互联网 发布:directx游戏编程入门 编辑:程序博客网 时间:2024/06/09 20:44

1.依赖jar

<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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zrj.points</groupId><artifactId>kafka-consumer</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>kafka-consumer</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.version>4.3.3.RELEASE</spring.version></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>1.1.0.RELEASE</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-1.2-api</artifactId><version>2.2</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.2</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.2</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-jcl</artifactId><version>2.2</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>2.2</version></dependency></dependencies><build><finalName>kafka-consmer</finalName><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.7</source><target>1.7</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.eclipse.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>9.2.11.v20150529</version><configuration><jvmArgs>-Xms456m -Xmx456m -XX:MaxNewSize=456m-XX:MaxPermSize=1024m</jvmArgs><scanIntervalSeconds>10</scanIntervalSeconds><webApp><contextPath>/</contextPath></webApp><httpConnector><port>9090</port></httpConnector></configuration></plugin></plugins></build></project>

2.生产者

package com.zrj.points;import java.util.Properties;import org.apache.kafka.clients.producer.KafkaProducer;import org.apache.kafka.clients.producer.Producer;import org.apache.kafka.clients.producer.ProducerRecord;public class PointsKafkaProducerSimulator {public static void main(String[] args) {        Properties props = new Properties();        props.put("bootstrap.servers", "172.28.40.26:9092");        props.put("acks", "all");        props.put("retries", 0);        props.put("batch.size", 16384);        props.put("linger.ms", 1);        props.put("buffer.memory", 33554432);        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");        Producer<String, String> producer = new KafkaProducer<>(props);        for(int i = 0; i < 100; i++){            System.out.println("-----" + i);            producer.send(new ProducerRecord<String, String>("test", Integer.toString(i), "Msg:"+Integer.toString(i)));        }        producer.close();    }}

3.消费者

package com.zrj.points;import java.util.Arrays;import java.util.Properties;import org.apache.commons.logging.Log;import org.apache.kafka.clients.consumer.ConsumerRecord;import org.apache.kafka.clients.consumer.ConsumerRecords;import org.apache.kafka.clients.consumer.KafkaConsumer;import org.apache.logging.log4j.LogManager;import org.springframework.kafka.listener.MessageListener;/** * 业务日志消费者监听器 * @author qianll * */public class PointsKafkaConsumerListener implements MessageListener<String, String>{    public void init(){    Log log = LogHelper.getLog(LogTypeEnum.PAY);    LogManager.getLogger("points").info("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");        System.out.println("SSSSSSSSSSSSSSSSSinit--------------");    }    @Overridepublic void onMessage(ConsumerRecord<String, String> record) {System.out.println("XXXXXXXXXXXX"+record.key()+" : "+record.value());}    public static void main(String[] args) {        Properties props = new Properties();        props.put("bootstrap.servers", "172.28.40.26:9092");        props.put("group.id", "test");        props.put("enable.auto.commit", "true");        props.put("auto.commit.interval.ms", "1000");        props.put("session.timeout.ms", "30000");        props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");        props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");        KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);        consumer.subscribe(Arrays.asList("test"));        while (true) {            System.out.println("-----");            ConsumerRecords<String, String> records = consumer.poll(9);            for (ConsumerRecord<String, String> record : records)                System.out.printf("XXXXXXXXXXXX"+"offset = %d, key = %s, value = %s", record.offset(), record.key(), record.value());        }    }}

4.spring bean配置

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:redis="http://www.springframework.org/schema/redis"xmlns:batch="http://www.springframework.org/schema/batch" xmlns:cache="http://www.springframework.org/schema/cache"xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch.xsd       http://www.springframework.org/schema/redis http://www.springframework.org/schema/redis/spring-redis.xsd       http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 定义consumer的参数 -->    <bean id="consumerProperties" class="java.util.HashMap">        <constructor-arg>            <map>                <entry key="bootstrap.servers" value="${bootstrap.servers}"/>                <entry key="group.id" value="0"/>                <entry key="enable.auto.commit" value="true"/>                <entry key="auto.commit.interval.ms" value="1000"/>                <entry key="session.timeout.ms" value="15000"/>                <entry key="key.deserializer" value="org.apache.kafka.common.serialization.StringDeserializer"/>                <entry key="value.deserializer" value="org.apache.kafka.common.serialization.StringDeserializer"/>            </map>        </constructor-arg>    </bean>        <bean id="consumerFactory" class="org.springframework.kafka.core.DefaultKafkaConsumerFactory">        <constructor-arg ref="consumerProperties"/>    </bean>        <!-- 实际执行消息消费的类 -->    <bean id="messageListener" class="com.zrj.points.PointsKafkaConsumerListener" init-method="init"/>        <!-- 消费者容器配置信息 -->    <bean id="containerProperties" class="org.springframework.kafka.listener.config.ContainerProperties">        <constructor-arg name="topics" value="test"/>        <property name="messageListener" ref="messageListener"/>    </bean>        <bean id="messageListenerContainer" class="org.springframework.kafka.listener.KafkaMessageListenerContainer" init-method="doStart">        <constructor-arg ref="consumerFactory"/>        <constructor-arg ref="containerProperties"/>        <property name="autoStartup" value="true" />    </bean></beans>