使用spring事件机制,异步发送消息到kafka

步骤:

1、创建event

public class KafkaSendMsgEvent extends ApplicationEvent {

    private List dtoList;

    public KafkaSendMsgEvent(Object source, List dtoLists) {
        super(source);
        dtoList = dtoLists;
    }

    public List getDtoList() {
        return dtoList;
    }
}
View Code

2、创建listener

@Configuration
@EnableAsync
public class KafkaSndMsgListener {

    @Resource
    private Producer producer;

    private ObjectMapper mapper;

    @PostConstruct
    public void init() {
        mapper = new ObjectMapper();
    }

    /**
     * 使用spring的事件机制,异步往kafka发送消息
     * @param event
     */
    @Async
    @EventListener
    public void kafkaSndMsgListener(KafkaSendMsgEvent event){
        String message = getMessage(event.getDtoList());
        producer.sendMsg(message);

    }

    private String getMessage(List<String> dto) {
        try {
            return mapper.writeValueAsString(dto);
        } catch (JsonProcessingException ex) {
            throw new OpcException(ex);
        }
    }
}
View Code

3、发布spring事件

    @RequestMapping("/")
    public void readImmData() {
        long startTime = System.nanoTime();
        // 采集实时数据
        List<String> dtoList = Lists.newArrayList();
        dtoList.add("test-1");
        dtoList.add("test-2");
        dtoList.add("test-3");
        // 使用spring事件机制,异步发送消息到kafka
        eventPublisher.publishEvent(new KafkaSendMsgEvent(this, dtoList));
        log.info("读取数据耗时:{} 毫秒, 数据量:{}", Duration.ofNanos(System.nanoTime() - startTime).toMillis(), dtoList.size());
    }
View Code

ref:https://blog.csdn.net/weixin_43770545/article/details/105971971

gitee:https://gitee.com/caesarthegreat/kafka-demo.git

posted @ 2023-01-20 18:33  Caesar_the_great  阅读(160)  评论(0编辑  收藏  举报