使用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; } }
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); } } }
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());
}
ref:https://blog.csdn.net/weixin_43770545/article/details/105971971

浙公网安备 33010602011771号