`
白马探
  • 浏览: 14600 次
社区版块
存档分类
最新评论

kafka消息平台使用spring+kafka的集成方案

 
阅读更多

Honghu的消息服务平台已经抛弃了之前的ActiveMQ,改用高吞吐量比较大的Kafka分布式消息中间件方案:
kafka消息平台使用spring+kafka的集成方案,详情如下:
1. 使用最高版本2.1.0.RELEASE集成jar包:spring-integration-kafka

(企业架构源码可以加求球:三五三六二四七二五九)


2. Zookeeper、Kafka分布式集群使用init.properties配置化方案。

kafka.servers=127.0.0.1:9092    
kafka.topic=xxxooo  

 3. 使用消息生产者spring-context-producer配置化方案。

<?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:context="http://www.springframework.org/schema/context"    
     xsi:schemaLocation="http://www.springframework.org/schema/beans    
         http://www.springframework.org/schema/beans/spring-beans.xsd    
         http://www.springframework.org/schema/context    
         http://www.springframework.org/schema/context/spring-context.xsd">   
  
  
    <!-- 定义producer的参数 -->  
    <bean id="producerProperties" class="java.util.HashMap">  
        <constructor-arg>  
            <map>  
                <entry key="bootstrap.servers" value="localhost:9092" />  
                <entry key="group.id" value="2" />  
                <entry key="retries" value="10" />  
                <entry key="batch.size" value="16384" />  
                <entry key="linger.ms" value="1" />  
                <entry key="buffer.memory" value="33554432" />  
                <entry key="key.serializer"  
                    value="org.apache.kafka.common.serialization.IntegerSerializer" />  
                <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>  
  
    <!-- 创建kafkatemplate bean,使用的时候,只需要注入这个bean,即可使用template的send消息方法 -->  
    <bean id="KafkaTemplate" class="org.springframework.kafka.core.KafkaTemplate">  
        <constructor-arg ref="producerFactory" />  
        <constructor-arg name="autoFlush" value="true" />  
        <property name="defaultTopic" value="test" />  
    </bean>  
</beans>  

 4. 使用消息消费者spring-context-producer配置化方案。

<?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:context="http://www.springframework.org/schema/context"    
     xsi:schemaLocation="http://www.springframework.org/schema/beans    
         http://www.springframework.org/schema/beans/spring-beans.xsd    
         http://www.springframework.org/schema/context    
         http://www.springframework.org/schema/context/spring-context.xsd">   
  
  
    <!-- 定义consumer的参数 -->  
    <bean id="consumerProperties" class="java.util.HashMap">  
        <constructor-arg>  
            <map>  
                <entry key="bootstrap.servers" value="localhost:9092" />  
                <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.IntegerDeserializer" />  
                <entry key="value.deserializer"  
                    value="org.apache.kafka.common.serialization.StringDeserializer" />  
            </map>  
        </constructor-arg>  
    </bean>  
  
    <!-- 创建consumerFactory bean -->  
    <bean id="consumerFactory"  
        class="org.springframework.kafka.core.DefaultKafkaConsumerFactory">  
        <constructor-arg>  
            <ref bean="consumerProperties" />  
        </constructor-arg>  
    </bean>  
  
    <!-- 实际执行消息消费的类 -->  
    <bean id="messageListernerConsumerService" class="com.sml.sz.kafka.KafKaConsumer" />  
  
    <!-- 消费者容器配置信息 -->  
    <bean id="containerProperties"  
        class="org.springframework.kafka.listener.config.ContainerProperties">  
        <constructor-arg value="test" />  
        <property name="messageListener" ref="messageListernerConsumerService" />  
    </bean>  
  
    <!-- 创建kafkatemplate bean,使用的时候,只需要注入这个bean,即可使用template的send消息方法 -->  
    <bean id="messageListenerContainer"  
        class="org.springframework.kafka.listener.KafkaMessageListenerContainer"  
        init-method="doStart">  
        <constructor-arg ref="consumerFactory" />  
        <constructor-arg ref="containerProperties" />  
    </bean>  
</beans>    

 5. 使用注解方式注入消息类型

@Autowired  
private KafkaTemplate<xxx, ooo> kafkaTemplate;

6. 重写MessageListener 的getMessage方法获取消息(业务实现)

7. RestFul服务方式测试消息服务
@CrossOrigin(origins = "*", maxAge = 3600, methods = { RequestMethod.GET, RequestMethod.POST, RequestMethod.DELETE,  
        RequestMethod.PUT })  
@RestController  
@RequestMapping(value = "/rest/kafka")  
public class KafKaProducer {  
      
    @RequestMapping(value = "/send", method = RequestMethod.GET)  
    public JSONObject save() {  
        System.out.println("+++++++++++++++++++++++++++++++");  
        kafkaTemplate.sendDefault("HongHu KAFKA分布式消息服务测试");    
        return null;  
    }  
      
    @Autowired    
    private KafkaTemplate<Integer, String> kafkaTemplate;  
      
    
  
}  
 
@RestController  
public class KafKaConsumer implements MessageListener<Integer, String> {  
  
    @Autowired  
    private LogService logService;  
    public void onMessage(ConsumerRecord<Integer, String> records) {  
        System.out.println("====================" + records);  
        Object o = records.value();  
        Log log = new Log();  
        log.setIsNewRecord(true);  
        log.setId(IdGen.uuid());  
        log.setTitle(String.valueOf(o));  
        logService.save(log);  
  
    }  
  
}  
 接受消息了------------------:ConsumerRecord(topic = xxxooo, partition = 0, offset = 2489, CreateTime = 1479647648299, checksum = 3372898135, serialized key size = -1, serialized value size = 40, key = null, value = HongHu KAFKA分布式消息服务测试)
 
到此结束!
 

核心架构:Spring Cloud、Spring Boot、Mybatis、Redis、Rabbit MQ、微服务、分布式、电子商务

核心思想:产品微服务、模块化、原子化、持续集成、分布式、集群部署

开发模式:代码生成工具、驱动式开发模式、提高开发效率

分享到:
评论

相关推荐

    spring+zookeeper+kafka

    Kafka是由LinkedIn开发并贡献给Apache的分布式流处理平台,它作为消息队列,可以高效地处理大量实时数据。Kafka具有高吞吐量、低延迟和容错性等特性,广泛应用于日志收集、网站活动跟踪、流式数据处理等领域。Spring...

    spring-boot集成kafka

    本文将详细讲解如何在Spring Boot项目中集成Kafka,实现消息的发送与接收。 首先,我们需要在Spring Boot项目的`pom.xml`文件中添加Kafka相关的依赖。Spring for Apache Kafka提供了与Spring Boot整合的便利,通过...

    22.Spring Cloud整合RabbitMQ或Kafka消息驱动

    在Spring Cloud框架中,整合RabbitMQ或Kafka作为消息驱动是常见的微服务间通信方式。这两种技术都是流行的消息中间件,用于实现异步处理、解耦和扩展性。下面将详细阐述它们在Spring Cloud中的应用。 首先,...

    spring-kafka 整合官方文档

    spring-kafka是Spring框架对Apache Kafka消息系统进行整合的一个项目,它简化了Kafka的使用,使其更容易与Spring应用程序集成。Apache Kafka是一个分布式流处理平台,主要用于构建实时数据管道和流应用程序。它具备...

    spring boot集成kafka

    综上所述,`kafkaTest1`项目展示了Spring Boot基础的Kafka集成,而`kafkaTest`项目则利用了`spring-integration-kafka`插件来实现更灵活的消息处理。这两个项目都为开发者提供了一种便捷的方式,将Kafka集成到Spring...

    Kafka与spring集成

    要将Kafka与Spring集成,需要使用Spring的消息处理机制。在Spring中,可以使用@KafkaListener注解来监听Kafka主题,并将消息处理委托给Spring的消息处理器。 实例代码 本文提供了一个完整的实例代码,演示如何将...

    Kafka 2.9 版本 jdk1.7+

    Kafka还支持多语言客户端,如Java、Python、C++等,使得不同语言的应用程序都能轻松地与Kafka集成。此外,Kafka Connect允许你方便地将数据导入导出到其他数据存储,如Hadoop、Elasticsearch等。 在实际应用中,...

    spring-boot+kafka+hibernate+redis示例

    在Spring Boot中,我们可以通过`@KafkaListener`注解监听特定的Kafka主题,或者使用`KafkaTemplate`发送消息。Kafka的高吞吐量和分布式特性使其成为处理大规模实时数据的理想选择。 Redis作为内存数据结构存储系统...

    Spring 集成 Kafka的配置文件及代码讲解

    在本文中,我们将深入探讨如何将Spring框架与Apache Kafka集成,以便实现在Spring应用中发送和接收消息。Kafka是一个高吞吐量、分布式的发布/订阅消息系统,而Spring框架是Java开发中最广泛使用的应用框架之一。通过...

    ssm:销售系统项目,spring + spring mvc + mybatis + dubbo + kafka + redis + maven

    综上所述,SSM项目是一个集成了多种成熟技术的销售系统解决方案,它充分利用了Spring的灵活性、Mybatis的数据处理能力、Dubbo的分布式服务特性、Kafka的消息传输优势以及Redis的高速缓存功能。这样的设计确保了系统...

    spring-cloud-learning:Springcloud + rabbitmq + kafka + slueth + zipkin + lcn + redis

    Spring Cloud 是一个全面的微服务解决方案,它集成了多种开源工具和服务,以帮助开发者快速创建、部署和管理分布式系统。本项目"spring-cloud-learning:Springcloud + rabbitmq + kafka + slueth + zipkin + lcn + ...

    springboot集成kafka进行消息发布和订阅jar

    综上所述,这个名为`kafkaDemo`的项目实现了Spring Boot与Kafka的集成,能够轻松地发布和订阅消息,同时也支持动态修改Kafka配置和适应不同JDK版本,是构建分布式系统中的理想组件。通过理解和实践这个项目,开发者...

    springboot - 2.7.3版本 - (七)整合Kafka

    在`springboot-kafka`目录下,可能包含了一个示例项目,你可以通过导入IDE进行编译和运行,以了解Spring Boot与Kafka集成的实践操作。 通过以上步骤,你已经掌握了如何在Spring Boot 2.7.3中集成Apache Kafka的基本...

    springboot和kafka的集成

    总结来说,Spring Boot与Apache Kafka的集成使得在微服务架构中实现消息传递变得简单而高效。通过`spring-boot-starter-data-kafka`起步依赖,我们可以快速创建生产者和消费者,利用Spring的注解驱动特性简化编程...

    spring cloud stream kafka 消息驱动集成

    - 使用 Spring Cloud Stream 集成 Kafka 需要在配置中指定消息代理类型(Binder),例如 `spring.cloud.stream.kafka.bindings`。 - 应用程序可以通过 ChannelProducers 和 ChannelConsumers 来创建输入和输出通道...

    spring-kafka源代码

    Spring Kafka是Spring框架的一部分,专为集成Apache Kafka而设计,提供了一套轻量级且强大的API,使得在Java应用中使用Kafka变得更加简单。本文将围绕Spring Kafka的源代码进行深度解析,帮助开发者更好地理解和运用...

    springMVC-kafka消息分发

    **SpringMVC与Kafka集成** 在SpringMVC中集成Kafka,可以实现生产者和消费者的创建,从而实现实时消息分发。以下是一些关键知识点: 1. **配置Kafka连接** 在SpringMVC应用中,我们需要配置Kafka的连接信息,包括...

    spring-kafka-demo

    Spring Kafka 是 Spring 框架为集成 Apache Kafka 提供的一个模块,它使得在 Java 应用程序中使用 Kafka 变得简单且直观。本项目 "spring-kafka-demo" 提供了一个完整的示例,涵盖了生产者和消费者的配置与实现,...

    SpringCloud与Kafka消息中间件集成教程

    ### SpringCloud与Kafka消息中间件集成教程 #### 一、SpringCloud概述 Spring Cloud 是一个基于Spring Boot的框架,旨在提供一系列开箱即用的工具和服务,帮助开发者轻松构建和部署微服务架构的应用程序。它集合了...

Global site tag (gtag.js) - Google Analytics