ElasticSearch学习总结(八):插件的开发

本文主要总结Elasticsearch 自定义 REST 接口的插件开发流程。

1. 插件介绍

本插件逻辑比较简单,主要用来返回包含指定前缀的节点列表。

2. 代码说明

插件主要包括两部分的内容,一部分用来对插件的注册,另一部分负责对业务逻辑的处理

插件注册部分:

public class CustomerRestActionPlugin extends Plugin implements ActionPlugin {
    public CustomerRestActionPlugin(){
        super();
        System.out.println("Plugin for node name search");
    }


    @Override
    public List<Class<? extends RestHandler>> getRestHandlers() {
        return Collections.singletonList(CustomerRestAction.class);
    }
}

业务逻辑处理部分:

    @Override
    protected RestChannelConsumer prepareRequest(RestRequest restRequest, NodeClient nodeClient) throws IOException {
        final String nodePrefix = restRequest.param("prefix", "");
        return (channel) -> {

            nodeClient.admin().cluster().prepareNodesInfo().all().execute(new RestBuilderListener<NodesInfoResponse>(channel) {
                @Override
                public RestResponse buildResponse(NodesInfoResponse nodesInfoResponse, XContentBuilder xContentBuilder) throws Exception {
                    List<String> nodes = new ArrayList<String>();
                    for (NodeInfo nodeInfo : nodesInfoResponse.getNodes()) {
                        if (nodePrefix.isEmpty()) {
                            nodes.add(nodeInfo.getNode().getName());
                        } else if (nodeInfo.getNode().getName().startsWith(nodePrefix)) {
                            nodes.add(nodeInfo.getNode().getName());
                        }
                    }
                    xContentBuilder.startObject().field("nodes", nodes).endObject();
                    return new BytesRestResponse(RestStatus.OK, xContentBuilder);
                }
            });

        };
    }

3. 打包部署

3.1 打包与部署

通过以下命令生成压缩包,压缩包中主要包括jar文件,配置文件等。

mvn clean package

通过执行该命令,在target/release目录下会生成名称为elasticsearch-esext-5.1.1.zip的压缩包

3.2 部署

  1. 在elasticsearch/plugins目录下,创建CustomerRestActionPlugin子目录
  2. 将该压缩包解压缩到CustomerRestActionPlugin目录下
  3. 重启ES

3.3 验证

执行已下命令,查看返回结果

 curl -XGET 'localhost:9200/_masting/nodes?prefix=test'

4. Git代码

完整代码,可从 https://github.com/Eric-aihua/esext.git 获取

猜你喜欢

转载自blog.csdn.net/sun7545526/article/details/79458440
今日推荐