spring集成kafka实现producer和consumer

4 篇文章 0 订阅

目前网上针对kafka0.10没找到合适的集成案例,想使用spring-integration-kafka框架,但发现官方文档也不全,干脆自己用spring简单实现了一下

pom.xml里的代码:

[html]  view plain  copy
  1. <repositories>  
  2.     <repository><!-- Spring-kafka的资源库地址 -->  
  3.         <id>spring-milestones</id>  
  4.         <name>Spring Milestones</name>  
  5.         <url>https://repo.spring.io/libs-milestone</url>  
  6.         <snapshots>  
  7.             <enabled>false</enabled>  
  8.         </snapshots>  
  9.     </repository>  
  10. </repositories>  


[html]  view plain  copy
  1. <dependency>  
  2.   <groupId>org.springframework.kafka</groupId>  
  3.   <artifactId>spring-kafka</artifactId>  
  4.   <version>1.0.0.RC1</version>  
  5. </dependency>  
消息生产者的配置如下:
kafka-producer.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.      xmlns:context="http://www.springframework.org/schema/context"  
  5.      xsi:schemaLocation="http://www.springframework.org/schema/beans  
  6.          http://www.springframework.org/schema/beans/spring-beans.xsd  
  7.          http://www.springframework.org/schema/context  
  8.          http://www.springframework.org/schema/context/spring-context.xsd">  
  9.       
  10.      <context:property-placeholder location="classpath:init.properties" />  
  11.       
  12.      <!-- 定义producer的参数 -->  
  13.      <bean id="producerProperties" class="java.util.HashMap">  
  14.         <constructor-arg>  
  15.             <map>  
  16.                 <entry key="bootstrap.servers" value="${bootstrap.servers}"/>  
  17.                 <entry key="group.id" value="0"/>  
  18.                 <entry key="retries" value="10"/>  
  19.                 <entry key="batch.size" value="16384"/>  
  20.                 <entry key="linger.ms" value="1"/>  
  21.                 <entry key="buffer.memory" value="33554432"/>  
  22.                 <entry key="key.serializer" value="org.apache.kafka.common.serialization.IntegerSerializer"/>  
  23.                 <entry key="value.serializer" value="org.apache.kafka.common.serialization.StringSerializer"/>  
  24.             </map>  
  25.         </constructor-arg>  
  26.      </bean>  
  27.        
  28.      <!-- 创建kafkatemplate需要使用的producerfactory bean -->  
  29.      <bean id="producerFactory" class="org.springframework.kafka.core.DefaultKafkaProducerFactory">  
  30.         <constructor-arg>  
  31.             <ref bean="producerProperties"/>  
  32.         </constructor-arg>  
  33.      </bean>  
  34.        
  35.      <!-- 创建kafkatemplate bean,使用的时候,只需要注入这个bean,即可使用template的send消息方法 -->  
  36.      <bean id="KafkaTemplate" class="org.springframework.kafka.core.KafkaTemplate">  
  37.         <constructor-arg ref="producerFactory"/>  
  38.         <constructor-arg name="autoFlush" value="true"/>  
  39.         <property name="defaultTopic" value="mhb-test"/>  
  40.      </bean>  
  41.   
  42. </beans>  


KafkaProducerTest.java

[java]  view plain  copy
  1. package com.tonsonmiao.common.kafka;  
  2.   
  3. import org.junit.Test;  
  4. import org.springframework.beans.factory.annotation.Autowired;  
  5. import org.springframework.kafka.core.KafkaTemplate;  
  6. import org.springframework.kafka.listener.KafkaMessageListenerContainer;  
  7.   
  8. /** 
  9.  * kafka读写测试类 
  10.  * @author miaohongbin  
  11.  * @version      
  12.  * Date: 2016年6月24日 下午6:22:38 <br/>  
  13.  * @since 
  14.  */  
  15. <p class="p1"><span class="s1">@RunWith</span>(SpringJUnit4ClassRunner.<span class="s2">class</span>)</p><p class="p2">@ContextConfiguration<span class="s3">(locations = {</span></p><p class="p3"><span class="s3"><span>   </span><span>   </span></span>"classpath:/bean/ja-kafka-producer.xml"</p><p class="p3"><span style="font-family: Arial, Helvetica, sans-serif;">})</span></p>public class KafkaTest {  
  16.       
  17.     @Autowired  
  18.     private KafkaTemplate<Integer, String> kafkaTemplate;  
  19.       
  20.     /** 
  21.      * 向kafka里写数据.<br/>   
  22.      * @author miaohongbin 
  23.      * Date:2016年6月24日下午6:22:58 
  24.      */  
  25.     @Test  
  26.     public void testTemplateSend(){  
  27.         kafkaTemplate.sendDefault("haha111");  
  28.     }  
  29.   
  30. }  

消费者代码:

kafka-consumer.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.      xmlns:context="http://www.springframework.org/schema/context"  
  5.      xsi:schemaLocation="http://www.springframework.org/schema/beans  
  6.          http://www.springframework.org/schema/beans/spring-beans.xsd  
  7.          http://www.springframework.org/schema/context  
  8.          http://www.springframework.org/schema/context/spring-context.xsd">  
  9.       
  10.      <context:property-placeholder location="classpath:init.properties" />  
  11.   
  12.     <!-- 定义consumer的参数 -->  
  13.      <bean id="consumerProperties" class="java.util.HashMap">  
  14.         <constructor-arg>  
  15.             <map>  
  16.                 <entry key="bootstrap.servers" value="${bootstrap.servers}"/>  
  17.                 <entry key="group.id" value="0"/>  
  18.                 <entry key="enable.auto.commit" value="true"/>  
  19.                 <entry key="auto.commit.interval.ms" value="1000"/>  
  20.                 <entry key="session.timeout.ms" value="15000"/>  
  21.                 <entry key="key.deserializer" value="org.apache.kafka.common.serialization.IntegerDeserializer"/>  
  22.                 <entry key="value.deserializer" value="org.apache.kafka.common.serialization.StringDeserializer"/>  
  23.             </map>  
  24.         </constructor-arg>  
  25.      </bean>  
  26.        
  27.      <!-- 创建consumerFactory bean -->  
  28.      <bean id="consumerFactory" class="org.springframework.kafka.core.DefaultKafkaConsumerFactory">  
  29.         <constructor-arg>  
  30.             <ref bean="consumerProperties"/>  
  31.         </constructor-arg>  
  32.      </bean>  
  33.        
  34.      <!-- 实际执行消息消费的类 -->  
  35.      <bean id="messageListernerConsumerService" class="com.tonsonmiao.common.kafka.KafkaConsumer"/>  
  36.        
  37.      <!-- 消费者容器配置信息 -->  
  38.      <bean id="containerProperties" class="org.springframework.kafka.listener.config.ContainerProperties">  
  39.         <constructor-arg value="mhb-test"/>  
  40.         <property name="messageListener" ref="messageListernerConsumerService"/>  
  41.      </bean>  
  42.        
  43.      <!-- 创建kafkatemplate bean,使用的时候,只需要注入这个bean,即可使用template的send消息方法 -->  
  44.      <bean id="messageListenerContainer" class="org.springframework.kafka.listener.KafkaMessageListenerContainer" init-method="doStart">  
  45.         <constructor-arg ref="consumerFactory"/>  
  46.         <constructor-arg ref="containerProperties"/>  
  47.      </bean>  
  48.   
  49. </beans>  

KafkaConsumer.java

[java]  view plain  copy
  1. package com.tonsonmiao.common.kafka;  
  2.   
  3. import org.apache.kafka.clients.consumer.ConsumerRecord;  
  4. import org.springframework.kafka.listener.MessageListener;  
  5.   
  6. public class KafkaConsumer implements MessageListener<Integer, String>{  
  7.   
  8.     @Override  
  9.     public void onMessage(ConsumerRecord<Integer, String> record) {  
  10.         System.out.println(record);  
  11.     }  
  12.   
  13. }  

配置文件init.properties

[plain]  view plain  copy
  1. bootstrap.servers=10.94.97.59:9092  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值