@Configuration
public class RabbbitConfig {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Value("${rabbitmq.host}")
private String host;
@Value("${rabbitmq.vhost}")
private String vhost;
@Value("${rabbitmq.port}")
private int port;
@Value("${rabbitmq.username}")
private String userName;
@Value("${rabbitmq.password}")
private String password;
public static final String EXCHANGE = "xalarm_aps_exchange_forward_to_component";
public static final String QUEUE_iFace = "hik.alarm.hagzvisual.face";
public static final String QUEUE_iVehicle = "hik.alarm.hagzvisual.vehicle";
public static final String ROUTINGKEY_iFace = "iface";
public static final String ROUTINGKEY_iVehicle = "ivehicle";
//创建连接工厂
@Bean(name = "connectionFactory")
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setHost(host);
connectionFactory.setVirtualHost(vhost);
connectionFactory.setPort(port);
connectionFactory.setUsername(userName);
connectionFactory.setPassword(password);
connectionFactory.setPublisherConfirms(true);
return connectionFactory;
}
// @Bean
// public RabbitListenerContainerFactory> rabbitListenerContainerFactory(ConnectionFactory connectionFactory){
// //SimpleRabbitListenerContainerFactory发现消息中有content_type有text就会默认将其转换成string类型的
// SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
// factory.setConnectionFactory(connectionFactory);
// return factory;
// }
//创建人脸告警消息队列
@Bean
public Queue createIFaceQueue() {
return new Queue(RabbbitConfig.QUEUE_iFace, true);
}
//创建车辆告警消息队列
@Bean
public Queue createIVehicleQueue() {
return new Queue(RabbbitConfig.QUEUE_iVehicle, true);
}
//创建交换机
@Bean
public DirectExchange directExchange() {
return new DirectExchange(RabbbitConfig.EXCHANGE, true, false);
}
//人脸告警队列与交换机进行绑定
@Bean
public Binding bindingDirectIFace() {
return BindingBuilder.bind(createIFaceQueue()).
to(directExchange()).
with(RabbbitConfig.ROUTINGKEY_iFace);
}
//车辆告警队列与交换机进行绑定
@Bean
Binding bindingFanoutIVehicle() {
return BindingBuilder.bind(createIVehicleQueue()).
to(directExchange()).
with(RabbbitConfig.ROUTINGKEY_iVehicle);
}
}
@Component
public class FaceAlarmCustomer {
private static final Logger logger = LoggerFactory.getLogger(FaceAlarmCustomer.class);
@Autowired
WarningService warningService;
@RabbitListener(bindings = {@QueueBinding(value = @Queue(value = RabbbitConfig.QUEUE_iFace, durable = "true"), exchange = @Exchange(value = RabbbitConfig.EXCHANGE), key = RabbbitConfig.ROUTINGKEY_iFace)})
@RabbitHandler
public void processDirectMsg(Message msg) {
String message = new String(msg.getBody(), StandardCharsets.UTF_8);
logger.info("FaceAlarmCustomer 接收到人脸消息 : " + message);
if (!HikStringUtil.isEmpty(message)) {
FaceWarningToCache faceWarningToCache = new FaceWarningToCache(message);
faceWarningToCache.start();
}
}
}