栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Cocos2d-x

(一)springboot集成ES

Cocos2d-x 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

(一)springboot集成ES

springboot集成ES
  1. 集成之前需要注意ES版本和Springboot的版本对应,这个可以再springboot官网查看。此处我选择的es版本为:7.10.1 springboot版本2.3.12.RELEASE。
  2. 引入pom.xml
        
            org.springframework.boot
            spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-data-mongodb
        
        
            org.springframework.boot
            spring-boot-starter-data-elasticsearch
        
  1. 使用RestHighLevelClient,代码如下:
    @Bean
    RestHighLevelClient restHighLevelClient() {
        List clusters = esConfigProperty.getClusters();
        if(CollectionUtils.isEmpty(clusters)){
            return null;
       }
       EsConfigProperty.Cluster cluster = clusters.stream().findFirst().get();
       String host = hostPortName.substring(0, hostPortName.lastIndexOf(":"));
        int port = Integer.parseInt(hostPortName.substring(hostPortName.lastIndexOf(":") + 1));
        // 初始化 RestClient, hostName 和 port 填写集群的内网 VIP 地址与端口
       RestClientBuilder builder = RestClient.builder(new HttpHost(host, port, scheme))
                    .setRequestConfigCallback(builder1 -> {
                       builder1.setConnectTimeout(cluster.getConnTimeout());
                        builder1.setSocketTimeout(cluster.getSocketTimeout());
                       builder1.setConnectionRequestTimeout(cluster.getConnectionRequestTimeout());
                        return builder1;
                   });
       //保活策略
        builder.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
                .setDefaultIOReactorConfig(IOReactorConfig.custom()
                        .setSoKeepAlive(true)
                        .build()));
         // 设置认证信息
        if(StringUtils.isNotEmpty(cluster.getUsername())&&StringUtils.isNotEmpty(cluster.getPassword())) {
            //如果没配置密码就可以不用下面这两部
            final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
           credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(cluster.getUsername(), cluster.getPassword()));
           builder.setHttpClientConfigCallback(httpAsyncClientBuilder -> {
                httpAsyncClientBuilder.disableAuthCaching();
                return httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
           });
        }
        RestHighLevelClient client = new RestHighLevelClient(builder);
        return client;
   }
    @Bean
    public ElasticsearchOperations elasticsearchTemplate() {
        return new ElasticsearchRestTemplate(restHighLevelClient());
    }
  1. 注意事项:RestHighLevelClient 长时间没有流量访问,隔段时间访问可能出现socket超时或者8,000milliseconds timeout on connection http-outgoing-1[ACTIVE]等错误。解决方案就是在集成RestHighLevelClient 是设置保活策略,即上面的代码的的:


同时客户端的探活时间修改为:net.ipv4.tcp_keepalive_time = 1800,可以参考:https://www.cnblogs.com/kevingrace/p/6656095.html 修改参数。

  1. 新增商品索引类:
    其中Document注解中indexName表示索引名称 shards表示索引数量,其他注解再下篇文章中会介绍
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Document(indexName = EsConst.PRODUCT_INDEX_NAME,shards = 5)
public class ProductIndex implements Serializable {
    
    @Id
    private Long skuId;
    
    @Field(type=FieldType.Integer)
    private Integer skuState;

    
    @MultiField(mainField = @Field(type=FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word"),
    otherFields = @InnerField(type=FieldType.Text,suffix = "pinyin",analyzer = "pinyin"))
    private String skuTitle;
}
  1. 使用ElasticsearchOperations 进行索引的操作,此处是批量新增或修改,索引搜索比较复杂,下篇文章单独讲。
 @Autowired
private ElasticsearchOperations elasticsearchTemplate

 public void batchUpdateProductIndex(List productIndexList){
       try{
           if(CollectionUtil.isNotEmpty(productIndexList)){
               if(!elasticsearchTemplate.indexOps(ProductIndex.class).exists()){
                   IndexOperations indexOps = elasticsearchTemplate.indexOps(ProductIndex.class);
                   indexOps.create();
                   Document document= indexOps.createMapping(ProductIndex.class);
                   indexOps.putMapping(document);
               }
               elasticsearchTemplate.save(productIndexList);
           }
       }catch (Exception e){
           log.error("batchUpdateProductIndex error {}",e);
       }
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/951999.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号