Spring data kafka操作kafka消息的发送和订阅

本项目是在Spring Boot的基础上构建的,笔者使用的是Spring Boot 1.5.8版本.

1.在项目的pom.xml文件中引入如下依赖项:

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>0.10.2.0</version>
</dependency>
<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
    <version>1.2.0.RELEASE</version>
</dependency>

备注:最好依赖的kafka jar和你的kafka消息中间件版本保持一致,否则会有意想不到的问题出现。


2.在application.properties文件中加入kafka所需要的配置信息

## kafka相关配置信息
## kafka集群地址列表
kafka.bootstrap-servers=192.168.74.80:9092,192.168.74.81:9092
## kafka消息主题
kafka.dataacquisition.topic=dataacquisition

3.Producer端配置

3.1.KafkaProducerConfig

@Configuration
@EnableKafka
public class KafkaProducerConfig {

    /**
     * The Bootstrap servers.
     */
    @Value("${kafka.bootstrap-servers}")
    private String bootstrapServers;

    /**
     * The Topic.
     */
    @Value("${kafka.dataacquisition.topic}")
    private String topic;

    /**
     * Gets topic.
     *
     * @return the topic
     */
    public String getTopic() {
        return topic;
    }

    /**
     * Producer factory producer factory.
     *
     * @return the producer factory
     */
    @Bean
    public ProducerFactory<String, String> producerFactory() {
        Map<String, Object> configProps = new HashMap<>();
        configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
        configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);

        return new DefaultKafkaProducerFactory<>(configProps);
    }

    /**
     * Kafka template kafka template.
     *
     * @return the kafka template
     */
    @Bean
    public KafkaTemplate<String, String> kafkaTemplate() {
        return new KafkaTemplate<>(producerFactory());
    }
}

3.2.Producer

@Component
public class Producer {

    /**
     * The constant logger.
     */
    private static final Logger logger = LogManager.getLogger(Producer.class);

    /**
     * The Kafka template.
     */
    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    /**
     * Send.
     *
     * @param topic   the topic
     * @param message the message
     */
    public void send(String topic , String message) {
        logger.debug("发送消息到kafka消息系统, message:" + message);
        kafkaTemplate.send(topic, message);
        logger.debug("发送消息到kafka消息系统结束");
    }
}



4.Consumer端

4.1.KafkaConsumerConfig

@Configuration
@EnableKafka
public class KafkaConsumerConfig {

    /**
     * The Bootstrap servers.
     */
    @Value("${kafka.bootstrap-servers}")
    private String bootstrapServers;

    /**
     * The Topic.
     */
    @Value("${kafka.dataacquisition.topic}")
    private String topic;

    /**
     * Gets topic.
     *
     * @return the topic
     */
    public String getTopic() {
        return topic;
    }

    /**
     * Consumer factory consumer factory.
     *
     * @return the consumer factory
     */
    @Bean
    public ConsumerFactory<String, String> consumerFactory() {
        Map<String, Object> configProps = new HashMap<>();
        configProps.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
        configProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        configProps.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        configProps.put(ConsumerConfig.GROUP_ID_CONFIG, topic);
        return new DefaultKafkaConsumerFactory<>(configProps);
    }

    /**
     * Kafka listener container factory concurrent kafka listener container factory.
     *
     * @return the concurrent kafka listener container factory
     */
    @Bean
    public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory() {
        ConcurrentKafkaListenerContainerFactory<String, String> factory =
                new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(consumerFactory());

        return factory;
    }
}
4.2.Consumer

@Component
public class Consumer {

    /**
     * The constant logger.
     */
    private static final Logger logger = LogManager.getLogger(Consumer.class);

    /**
     * The Data handle service.
     */
    @Autowired
    private DataHandleService dataHandleService;

    /**
     * Receive.
     *
     * @param message the message
     */
    @KafkaListener(topics = "${kafka.dataacquisition.topic}")
    public void receive(String message) {
        logger.info("接收到kafka消息系统的message:" + message);
        Merchandise merchandise = JsonUtils.jsonToObject(message, Merchandise.class);
        dataHandleService.handle(merchandise);
    }
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些 Spring Kafka 项目案例: 1. 银行交易系统:该项目使用 Spring Kafka 实现了一个实时的银行交易系统。当用户进行交易时,系统会将交易信息发送Kafka 主题中,并使用 Spring Kafka 消费者来消费这些信息。该系统还使用了 Spring Boot 和 Spring Data JPA 来管理数据。 2. 物联网数据处理系统:该项目使用 Spring Kafka 和 Apache Storm 实现了一个实时的物联网数据处理系统。当传感器收集到数据时,系统会将数据发送Kafka 主题中,并使用 Apache Storm 来处理这些数据。该系统还使用了 Spring Boot 和 Spring Data MongoDB 来管理数据。 3. 电商订单系统:该项目使用 Spring Kafka 实现了一个实时的电商订单系统。当用户下单时,系统会将订单信息发送Kafka 主题中,并使用 Spring Kafka 消费者来消费这些信息。该系统还使用了 Spring Boot 和 Spring Data JPA 来管理数据。 4. 实时日志处理系统:该项目使用 Spring Kafka 和 ELK(Elasticsearch、Logstash 和 Kibana)实现了一个实时的日志处理系统。当应用程序生成日志时,系统会将日志信息发送Kafka 主题中,并使用 Logstash 来处理这些日志。该系统还使用了 Spring Boot 和 Elasticsearch 来管理数据。 5. 实时推荐系统:该项目使用 Spring Kafka 和 Apache Spark 实现了一个实时的推荐系统。当用户进行操作时,系统会将操作信息发送Kafka 主题中,并使用 Apache Spark 来生成推荐结果。该系统还使用了 Spring Boot 和 Spring Data Redis 来管理数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值