ES 8.15.0,Kibana,Canal安装(二)之JavaApi (全流程Https,centos7)

简介:ES,Kibana,Canal安装及https配置,和Java Api调用,本文为第二章(主要介绍Java api的使用😁)

1. 基础配置

1.1 导入maven依赖

        <dependency>
            <groupId>co.elastic.clients</groupId>
            <artifactId>elasticsearch-java</artifactId>
            <version>8.15.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>8.15.0</version>
        </dependency>

1.2 创建es配置类

1.2.1 在kibana内创建apikey

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2.2 创建配置类,给java程序访问(直接访问https会报ssl的异常,具体的我忘记了,也可以参考1.2.2.1跳过ssl验证)

1.2.2.1 跳过ssl访问代码创建配置类(可选)
package com.wind.common.config;


import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.ElasticsearchTransport;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import nl.altindag.ssl.SSLFactory;
import org.apache.http.Header;
import org.apache.http.HttpHost;
import org.apache.http.message.BasicHeader;
import org.elasticsearch.client.RestClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.io.IOException;

@Configuration
public class ElasticsearchConfig {

    // URL and API key
    @Value("${elasticsearch.addresses}")
    private String serverUrl;

    @Value("${elasticsearch.apiKey}")
    private String apiKey;

    /**
     * 客户端
     * @return
     * @throws IOException
     */
    @Bean
    public ElasticsearchClient restClient(){
        SSLFactory sslFactory = SSLFactory.builder()
                .withUnsafeTrustMaterial()
                .withUnsafeHostnameVerifier()
                .build();
        RestClient restClient = RestClient
                .builder(HttpHost.create(serverUrl))
                // 请求头
                .setDefaultHeaders(new Header[]{
                        new BasicHeader("Authorization", "ApiKey " + apiKey)
                })
                // 设置跳过SSL验证
                .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setSSLContext(sslFactory.getSslContext())
                        .setSSLHostnameVerifier(sslFactory.getHostnameVerifier()))
                .build();
        // Create the transport with a Jackson mapper
        ElasticsearchTransport transport = new RestClientTransport(
                restClient, new JacksonJsonpMapper());

        // And create the API client
        ElasticsearchClient esClient = new ElasticsearchClient(transport);
        return esClient;
    }
}

yml中配置:
elasticsearch:
  addresses: https:192.168.180.150:9200
  apiKey: N2NxR0VwSUJPNTBud3B2alpPd2I6Y19CdUg0NnlUV0NGTzMwM1NnQWRzUQ==
1.2.2 .2 使用证书创建es配置类🎈
1.2.2.1 创建证书并导入到项目内
# 需要的指令
openssl pkcs12 -in elastic-stack-ca.p12 -clcerts -nokeys -out es-ca.crt

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2.2.2 es配置类
package com.wind.common.config;

import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.ElasticsearchTransport;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import org.apache.http.Header;
import org.apache.http.HttpHost;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.apache.http.message.BasicHeader;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.SSLContexts;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;

import javax.net.ssl.SSLContext;
import java.io.IOException;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;

/**
 * @author: zhangbo
 * @email: 210644837@qq.com
 * @description: es client 配置
 * @date: 2024/09/20
 */


@Configuration
public class ElasticsearchConfig {

    // URL and API key
    @Value("${elasticsearch.hostname}")
    private String hostname;

    @Value("${elasticsearch.port}")
    private Integer port;

    @Value("${elasticsearch.apiKey}")
    private String apiKey;

    private final String certPath = "cert/es-ca.crt";

    /**
     * 客户端
     *
     * @return
     * @throws IOException
     */
    @Bean
    public ElasticsearchClient restClient() throws Exception {
        // 加载证书资源
        ClassPathResource resource = new ClassPathResource(certPath);
        // 因为我的项目结构是父子项目,所有配置全部在comon下,为了不在其他模块在yml中配置elasticsearch的配置文件,选择了检查是否有证书才加载esClient
        if (resource.exists()) {
            // 搬运es官网代码
            CertificateFactory factory = CertificateFactory.getInstance("X.509");
            Certificate trustedCa;
            try (InputStream is = resource.getInputStream()) {
                trustedCa = factory.generateCertificate(is);
            }
            KeyStore trustStore = KeyStore.getInstance("pkcs12");
            trustStore.load(null, null);
            trustStore.setCertificateEntry("ca", trustedCa);
            SSLContextBuilder sslContextBuilder = SSLContexts.custom()
                    .loadTrustMaterial(trustStore, null);
            final SSLContext sslContext = sslContextBuilder.build();
            RestClient restClient = RestClient.builder(
                            new HttpHost(hostname, port, "https"))
                    // apiKey认证,也可以使用账号密码认证,账号密码认证见官网
                    // 官网地址:https://elastic.ac.cn/guide/en/elasticsearch/client/java-api-client/8.14/_basic_authentication.html
                    .setDefaultHeaders(new Header[]{
                            new BasicHeader("Authorization", "ApiKey " + apiKey)})
                    .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                        @Override
                        public HttpAsyncClientBuilder customizeHttpClient(
                                HttpAsyncClientBuilder httpClientBuilder) {
                            return httpClientBuilder.setSSLContext(sslContext);
                        }
                    }).build();

            ElasticsearchTransport transport = new RestClientTransport(
                    restClient, new JacksonJsonpMapper());
            return new ElasticsearchClient(transport);
        }
        return null;
    }
}

# yml配置
elasticsearch:
  hostname: 192.168.180.150
  port: 9200
  apiKey: N2NxR0VwSUJPNTBud3B2alpPd2I6Y19CdUg0NnlUV0NGTzMwM1NnQWRzUQ==

2.API调用

2.1 还没深入学习,学完了回来更新😄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值