springboot和kafka的实例

推荐文章

再过半小时,你就能明白kafka的工作原理了

1,引入jar

build.gradle 添加以下引用

compile group: 'org.springframework.kafka', name: 'spring-kafka', version: '2.4.4.RELEASE'

2,配置

application.yml 添加一下配置

spring:
  kafka:
    bootstrap-servers: 127.0.0.1:9092
    #生产者的配置,大部分我们可以使用默认的,这里列出几个比较重要的属性
    producer:
      #每批次发送消息的数量
      batch-size: 16
      #允许重试次数。大于0允许重试将潜在的改变数据的顺序。
      retries: 0
      #key序列化方式
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
    #消费者的配置
    consumer:
      #Kafka中没有初始偏移或如果当前偏移在服务器上不再存在时,默认区最新 ,有三个选项 【latest, earliest, none】
      auto-offset-reset: latest
      #是否开启自动提交
      enable-auto-commit: true
      #自动提交的时间间隔
      auto-commit-interval: 100
      #key,value的解码方式
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer、
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

3,生产者

MsgSender 消息发送接口


public interface MsgSender {
    /**
     * 发送消息
     *
     * @param data  消息信息
     * @param topic 主题
     */
    void sendMessage(String topic, Object data);
}

MsgSenderKafka 消息发送的kafka实现


import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Slf4j
@Component
public class MsgSenderKafka implements MsgSender {
    @Resource
    private KafkaTemplate kafkaTemplate;

    @Override
    public void sendMessage(String topic, Object data) {
        kafkaTemplate.send(topic, data);
        log.info("发送MQ成功:message={}", JSON.toJSONString(data));
    }
}

OrderProducer 订单发送消息


import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@Service
public class OrderProducer {
    @Resource
    private MsgSender msgSender;

    public void createOrder() {
        Map<String, Object> orderInfo = new HashMap<>();
        orderInfo.put("orderId", UUID.randomUUID().toString());
        orderInfo.put("price", 10000);
        orderInfo.put("description", "我是注册订单,请尽快处理");

        msgSender.sendMessage("ORDER", orderInfo);
    }

}

4,消费者

OrderConsumer 消费订单消息


/**
 * @author qizenan
 * @date 2020-9-9
 **/
@Slf4j
@Component
public class OrderConsumer {

    @KafkaListener(topics = {"ORDER"})
    public void listen(ConsumerRecord record) {
        log.info("收到消息,topic:{}, partition:{},  body:{}", record.topic(), record.partition(),
                JSON.toJSONString(record.value()));

        Map<Integer, Object> orderInfo = (Map<Integer, Object>) record.value();
        log.info("订单信息 orderInfo = {} ", orderInfo.toString());
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值