elasticsearch for java 认证连接

35 篇文章 1 订阅
35 篇文章 1 订阅

环境

服务器:centos6
elasticsearch:5+
java:1.8
工具:CRT

步骤

刚开始我是参照官网的来:

Transport Client

代码如下:

package elasticsearch.estutorial;

//import 省略。。。

public class EsUtils {

    public static TransportClient connectionEs(){

        //设置集群的名字
        Settings settings = Settings.builder().put("cluster.name", "yutao")
                .put("client.transport.sniff", true)
                .build();

        /*//忽视连接集群时名字验证
        builder.put("client.transport.ignore_cluster_name", true);
        //ping 一个节点时等待时间 默认5秒
        builder.put("client.transport.ping_timeout", "5s");
        //多久采样 ping / 节点列表和连接
        builder.put("client.transport.nodes_sampler_interval", "5s");*/

        try {
            //连接
            @SuppressWarnings("resource")
            TransportClient client = new PreBuiltTransportClient(settings)
                                         .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.116.131"), 9300));
            return client;
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void indexApi(){
        TransportClient client = connectionEs();
        String json = "{" +
                "\"user\":\"kimchy\"," +
                "\"postDate\":\"2013-01-30\"," +
                "\"message\":\"trying out Elasticsearch\"" +
            "}";

        List<DiscoveryNode> connectedNodes = client.connectedNodes();
        System.out.println(connectedNodes);


        IndexResponse response = client.prepareIndex("twitter", "tweet").setSource(json, XContentType.JSON).get();

        String index = response.getIndex();
        String type = response.getType();

        String id = response.getId();

        long version = response.getVersion();

        RestStatus status = response.status();

        System.out.println(index);
        System.out.println(type);
        System.out.println(id);
        System.out.println(version);
        System.out.println(status);

    }
}

main方法:

public static void main( String[] args )
    {
        EsUtils.indexApi();
        System.out.println( "Hello World!" );
    }

这个时候,它总是报,类似下面的错误:

Exception in thread "main" NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{hbw6d5KVQ5KJZT2rK3Oz-A}{192.168.116.131}{192.168.116.131:9300}]]
    at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:347)
    at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:245)
    at org.elasticsearch.client.transport.TransportProxyClient.execute(TransportProxyClient.java:59)
    at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:363)
    at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:408)
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:80)
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:54)
    at org.elasticsearch.action.ActionRequestBuilder.get(ActionRequestBuilder.java:62)
    at elasticsearch.estutorial.EsUtils.indexApi(EsUtils.java:63)
    at elasticsearch.estutorial.App.main(App.java:11)

网上的说法,就是:
①假设你改了集群的名字的话,代码里就要指定集群名称
②假设你指定了ip了,代码里同样也需要指定
③端口要使用9300

关键是上面三点我都做到了,可是还是不行。

后来猛然一想,9300的端口好像没有开放。

执行如下命令后,开放9300端口:

[yutao@localhost config]$ sudo firewall-cmd --permanent --add-port=9300/tcp
success
[yutao@localhost config]$ sudo firewall-cmd --reload
success
[yutao@localhost config]$ 
[yutao@localhost config]$ 
[yutao@localhost config]$ 
[yutao@localhost config]$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: dhcpv6-client http ssh
  ports: 7080/tcp 8080/tcp 9200/tcp 9300/tcp 9100/tcp 6379/tcp 5601/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  sourceports: 
  icmp-blocks: 
  rich rules: 

接着在执行代码,报错了,不过是另外一个错:

java missing authentication token for action [cluster:monitor/state]

这个错,错非常明显,因为我安装了x-pack,所以需要认证:

网上搜索了一番:

X-Pack for the Elastic Stack

installing_xpackclient

Java Client and Security

引入 xpackclient

<project ...>

   <repositories>
      <!-- add the elasticsearch repo -->
      <repository>
         <id>elasticsearch-releases</id>
         <url>https://artifacts.elastic.co/maven</url>
         <releases>
            <enabled>true</enabled>
         </releases>
         <snapshots>
            <enabled>false</enabled>
         </snapshots>
      </repository>
      ...
   </repositories>
   ...

   <dependencies>
      <!-- add the x-pack jar as a dependency -->
      <dependency>
         <groupId>org.elasticsearch.client</groupId>
         <artifactId>x-pack-transport</artifactId>
         <version>5.6.4</version>
      </dependency>
      ...
   </dependencies>
   ...

 </project>

使用类:PreBuiltXPackTransportClient

之后代码里使用PreBuiltXPackTransportClient,而不是PreBuiltTransportClient

public static TransportClient connectionEs(){

        //设置集群的名字
        Settings settings = Settings.builder().put("cluster.name", "yutao")
                .put("client.transport.sniff", true)
                .put("xpack.security.transport.ssl.enabled", false)
                .put("xpack.security.user", "elastic:changeme").build();

        /*//忽视连接集群时名字验证
        builder.put("client.transport.ignore_cluster_name", true);
        //ping 一个节点时等待时间 默认5秒
        builder.put("client.transport.ping_timeout", "5s");
        //多久采样 ping / 节点列表和连接
        builder.put("client.transport.nodes_sampler_interval", "5s");*/

        try {
            //连接
            @SuppressWarnings("resource")
//          TransportClient client = new PreBuiltTransportClient(settings)
//                                       .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.116.131"), 9300));

            TransportClient client = new PreBuiltXPackTransportClient(settings)
             .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.116.131"), 9300));
            return client;
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return null;
    }

这样就可以啦!

就我的测试项目而言,执行后的结果为:

no modules loaded
loaded plugin [org.elasticsearch.index.reindex.ReindexPlugin]
loaded plugin [org.elasticsearch.join.ParentJoinPlugin]
loaded plugin [org.elasticsearch.percolator.PercolatorPlugin]
loaded plugin [org.elasticsearch.script.mustache.MustachePlugin]
loaded plugin [org.elasticsearch.transport.Netty3Plugin]
loaded plugin [org.elasticsearch.transport.Netty4Plugin]
loaded plugin [org.elasticsearch.xpack.XPackPlugin]
[{ONRkJ5J}{ONRkJ5JxTH6Ic_E_sKhNAg}{4C0l5X7uQfShFJPj8pcXYQ}{192.168.116.131}{192.168.116.131:9300}{ml.max_open_jobs=10, ml.enabled=true}]
twitter
tweet
AWASSMU-4Wy1PJFus9gf
1
CREATED
Hello World!

好了,基础而已;

参考地址:

https://www.elastic.co/guide/en/x-pack/5.6/api-java.html#_installing_xpackclient

https://www.elastic.co/guide/en/x-pack/current/java-clients.html#java-clients

https://www.elastic.co/guide/en/x-pack/current/index.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山鬼谣me

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值