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);

    }
}

 

posted on 2020-05-15 14:35  陈惟鲜的博客  阅读(374)  评论(0编辑  收藏  举报

导航