35 lines
1.4 KiB
Java
35 lines
1.4 KiB
Java
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<String> {
|
|
@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);
|
|
}
|
|
}
|
|
}
|