package com.zy.acs.hex.consumer; import com.rabbitmq.client.Channel; import com.zy.acs.hex.constant.InfluxDBConstant; import com.zy.acs.hex.constant.RabbitConstant; import com.zy.acs.hex.consumer.listener.AbstractListener; import com.zy.acs.hex.domain.Device; import com.zy.acs.hex.utils.ReflectionUtils; import com.zy.acs.hex.utils.StrUtils; import com.zy.component.influxdb.service.InfluxDBService; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.*; import org.springframework.amqp.support.AmqpHeaders; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.handler.annotation.Header; import org.springframework.stereotype.Component; /** * 消费者 */ @Slf4j @Component @RabbitListener(bindings = @QueueBinding( value = @Queue(name = RabbitConstant.TOPIC_QUEUE_DOWN, durable = RabbitConstant.DURABLE), exchange = @Exchange(name = RabbitConstant.TOPIC_EXCHANGE, type = RabbitConstant.TOPIC_EXCHANGE_TYPE), key = RabbitConstant.ROUTING_KEY_DOWN )) public class DownMessageListener implements AbstractListener { @Autowired private InfluxDBService influxDBService; @RabbitHandler public void handle(Device msg, @Header(AmqpHeaders.RECEIVED_ROUTING_KEY) String routingKey, Channel channel) { log.info("routingKey:{},receive down message:{}", routingKey, msg); influxDBService.writeData(InfluxDBConstant.DEVICE_MEASUREMENT, StrUtils.getTagsByRoutingKey(routingKey), ReflectionUtils.convertBean2Map(msg)); } }