ELK elasticsearch 与 springboot 结合使用,为了方便测试将MQ地址,索引名称写到配置文件中
为了方便测试将MQ地址,索引名称写到配置文件中。
想到使用springboot的@Value。
不行,经过多番查找,最终这样做。
1、es索引写在配置文件yml中
配置文件application.yml:配置索引名称。
search:
index:
video: chen_wk_video_index
常量类:读取配置文件yml中的配置,将读取到的内容转换为bean。
其中冒号后面表示读取不到的时候,给个默认值。这里没声明bean的id信息,就用默认的字段名称作为beanid
@Component public class ElasticsearchConstants { /**视频*/ @Value("${search.index.video:my_video_index}") private String SEARCH_INDEX_VIDEO; @Bean public String SEARCH_INDEX_VIDEO() { return SEARCH_INDEX_VIDEO; } }
索引实体类:引用这里与实体类名字一致即可。
@Data @Document(indexName = "#{@SEARCH_INDEX_VIDEO}", type = "_doc") public class IndexVideoEsVo extends BaseEsVo { }
运行后在kibana后台看到,生成索引的名称就是配置名称。
2、mq队列名称写在配置文件yml中
配置文件yml,配置队列中要用到的信息。队列、交换机、路由键。。
mq:
my:
exchange:
video: chen_exchange_video
queue:
video: chen_exchange_video
route:
video: chen_exchange_video
读取配置,配置映射关系。
@Component public class RabbitMqConstants { //my视频索引 public static String WK_my_EXCHANGE_VIDEO; @Value("${mq.my.exchange.video:wk_my_exchange_video}") private void setWK_my_EXCHANGE_VIDEO(String quuenName) { WK_my_EXCHANGE_VIDEO= quuenName; } //my视频队列 public static String WK_my_QUEUE_VIDEO; @Value("${mq.my.queue.video:wk_my_queue_video}") private void setWK_my_QUEUE_VIDEO(String quuenName) { WK_my_QUEUE_VIDEO= quuenName; } //my视频路由键 public static String WK_my_ROUTE_VIDEO; @Value("${mq.my.route.video:wk_my_route_video}") private void setWK_my_ROUTE_VIDEO(String quuenName) { WK_my_ROUTE_VIDEO= quuenName; } }
// 配置队列、路由键、交换机关系
@Configuration public class RabbitMqConfig { /*===========video====================*/ /** * 视频交换机 * @return */ @Bean public DirectExchange my_exchange_video() { return new DirectExchange(RabbitMqConstants.WK_my_EXCHANGE_VIDEO); } /** * 视频队列 * @return */ @Bean public Queue my_queue_video() { return new Queue(RabbitMqConstants.WK_my_QUEUE_VIDEO, true); } /** * my视频绑定 * @return */ @Bean public Binding my_queue_bulletin_video() { //链式写法: 用指定的路由键将队列绑定到交换机 return BindingBuilder.bind(my_queue_video()).to(my_exchange_video()).with(RabbitMqConstants.WK_my_ROUTE_VIDEO); } }
监听队列:
@Slf4j @Component @RabbitListener(queues = "${mq.my.queue.video}") public class myVideoListener { @Autowired private SearchVideoSenderService searchVideoSenderService; @Autowired private VideoEsController videoEsController; @RabbitHandler public void onMessage(String message) throws Exception { String messageContext = message; log.info(RabbitMqConstants.WK_my_QUEUE_VIDEO + "接收到内容:" + messageContext); } }