package com.baiyue.audit.mq; import com.baiyue.audit.dto.AuditIngestRequest; import com.baiyue.audit.service.AuditIngestService; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.annotation.Resource; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.core.RocketMQListener; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Component; /** RocketMQ 审计事件消费者;数据库 event_id 唯一键保证重复消息安全。 */ @Component @ConditionalOnProperty(prefix = "baiyue.audit.rocketmq", name = "consumer-enabled", havingValue = "true") @RocketMQMessageListener( topic = "${baiyue.audit.rocketmq.topic}", selectorExpression = "AUDIT", consumerGroup = "${baiyue.audit.rocketmq.consumer-group}") public class AuditRocketMqConsumer implements RocketMQListener { @Resource private ObjectMapper json; @Resource private AuditIngestService service; @Override public void onMessage(String payload) { try { service.ingest(json.readValue(payload, AuditIngestRequest.class)); } catch (JsonProcessingException exception) { throw new IllegalArgumentException("审计消息格式无效", exception); } } }