kafka 集成spring 框架实战

kafka 集成spring 框架实战:

1、pom文件引入核心:

      <!--Spring-Kafka-->
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>

2、统一配置Brokers服务地址:kafka.properties

bootstrap.servers=localhost:9092
concurrency=3

3、生产者和消费者配置:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 查找最新的schemaLocation 访问 http://www.springframework.org/schema/ -->
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.0.xsd">

     <!-- 配置扫描路径 -->
     <context:component-scan base-package="cn.enjoyedu">
     	<context:exclude-filter type="annotation"
              expression="org.springframework.stereotype.Controller"/>
     </context:component-scan>

    <context:property-placeholder location="classpath*:config/kafka.properties" />
    <!-- 定义producer的参数 -->
    <bean id="producerProperties" class="java.util.HashMap">
        <constructor-arg>
            <map>
                <entry key="bootstrap.servers" value="${bootstrap.servers}" />
                <entry key="key.serializer"
                       value="org.apache.kafka.common.serialization.StringSerializer" />
                <entry key="value.serializer"
                       value="org.apache.kafka.common.serialization.StringSerializer" />
            </map>
        </constructor-arg>
    </bean>

    <!-- 创建kafkatemplate需要使用的producerfactory bean -->
    <bean id="producerFactory"
          class="org.springframework.kafka.core.DefaultKafkaProducerFactory">
        <constructor-arg>
            <ref bean="producerProperties"/>
        </constructor-arg>

    </bean>

    <!-- 发送监听器bean -->
    <bean id="sendListener" class="cn.enjoyedu.service.SendListener" />

    <!-- 创建kafkatemplate bean,使用的时候,只需要注入这个bean,
    即可使用template的send消息方法 -->
    <bean id="kafkaTemplate" class="org.springframework.kafka.core.KafkaTemplate">
        <constructor-arg ref="producerFactory" />
        <constructor-arg name="autoFlush" value="true" />
        <!-- 配置发送监听器bean -->
        <property name="producerListener" ref="sendListener"></property>

    </bean>

    <!-- 1.定义consumer的参数 -->
    <bean id="consumerProperties" class="java.util.HashMap">
        <constructor-arg>
            <map>
                <entry key="bootstrap.servers" value="${bootstrap.servers}" />
                <entry key="group.id" value="spring-kafka-group" />
                <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>

    <!-- 2.创建consumerFactory bean -->
    <bean id="consumerFactory"
          class="org.springframework.kafka.core.DefaultKafkaConsumerFactory" >
        <constructor-arg>
            <ref bean="consumerProperties" />
        </constructor-arg>
    </bean>

    <!-- 3.定义消费实现类 -->
    <bean id="kafkaConsumerService" class="cn.enjoyedu.service.KafkaConsumer" />

    <!-- 4.消费者容器配置信息 -->
    <bean id="containerProperties"
          class="org.springframework.kafka.listener.ContainerProperties">
        <constructor-arg name="topics">
            <list>
            <value>kafka-spring-topic</value>
        </list>
        </constructor-arg>
        <property name="messageListener" ref="kafkaConsumerService"></property>

    </bean>
    <!-- 5.消费者并发消息监听容器,执行doStart()方法 -->
    <bean id="messageListenerContainer"
          class="org.springframework.kafka.listener.ConcurrentMessageListenerContainer"
          init-method="doStart" >
        <constructor-arg ref="consumerFactory" />
        <constructor-arg ref="containerProperties" />
        <property name="concurrency" value="${concurrency}" />
    </bean>

    <!-- 消费者自行确认-1.定义consumer的参数 -->
    <bean id="consumerPropertiesAck" class="java.util.HashMap">
        <constructor-arg>
            <map>
                <entry key="bootstrap.servers" value="${bootstrap.servers}" />
                <entry key="group.id" value="spring-kafka-group-ack" />
                <entry key="key.deserializer"
                       value="org.apache.kafka.common.serialization.StringDeserializer" />
                <entry key="value.deserializer"
                       value="org.apache.kafka.common.serialization.StringDeserializer" />
                <entry key="enable.auto.commit" value="false"/>
            </map>
        </constructor-arg>
    </bean>

    <!-- 消费者自行确认-2.创建consumerFactory bean -->
    <bean id="consumerFactoryAck"
          class="org.springframework.kafka.core.DefaultKafkaConsumerFactory" >
        <constructor-arg>
            <ref bean="consumerPropertiesAck" />
        </constructor-arg>
    </bean>

    <!-- 消费者自行确认-3.定义消费实现类 -->
    <bean id="kafkaConsumerServiceAck" class="cn.enjoyedu.service.KafkaConsumerAck" />

    <!-- 消费者自行确认-4.消费者容器配置信息 -->
    <bean id="containerPropertiesAck"
          class="org.springframework.kafka.listener.ContainerProperties">
        <!-- topic -->
        <constructor-arg name="topics">
            <list>
                <value>kafka-spring-topic-b</value>
            </list>
        </constructor-arg>
        <property name="messageListener" ref="kafkaConsumerServiceAck" />
        <!-- 消费者自行确认模式 -->
        <property name="ackMode" value="MANUAL_IMMEDIATE"></property>
    </bean>
    <!-- 消费者自行确认-5.消费者并发消息监听容器,执行doStart()方法 -->
    <bean id="messageListenerContainerAck"
          class="org.springframework.kafka.listener.ConcurrentMessageListenerContainer"
          init-method="doStart" >
        <constructor-arg ref="consumerFactoryAck" />
        <constructor-arg ref="containerPropertiesAck" />
        <property name="concurrency" value="${concurrency}" />
    </bean>

</beans>

4、核心业务代码:


	@Autowired
	private KafkaTemplate<String,String> kafkaTemplate;

	/**
	 * @param message
	 * @return String
	 */
	@ResponseBody
	@RequestMapping("springTest")
	public String queueSender(@RequestParam("message")String message){
		String opt="asa";
		try {
			kafkaTemplate.send("kafka-spring-topic",message);
			opt = "nandao";
		} catch (Exception e) {
			opt = e.getCause().toString();
		}
		return opt;
	}

到此、kafka集成spring分享完毕,大家可以一定要多多测试,下篇我们分析kafka和springBoot集成,敬请期待!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寅灯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值