Elasticsearch 6.2在JUnit测试中启动本地HTTP节点报错求助
解决Elasticsearch 6.2本地节点启动的
Unsupported transport.type错误 你遇到的这个错误是因为Elasticsearch 6.x版本要求明确指定传输层(transport)的实现类型,同时如果要通过REST客户端访问,还必须手动启用HTTP模块。下面是具体的解决方案和完整测试示例:
错误原因分析
在ES 6.2中,节点启动时不会默认配置transport类型,也不会自动开启HTTP服务——而你需要HTTP服务来让高级REST客户端发起请求。这两个关键配置的缺失,直接触发了Unsupported transport.type []的异常。
正确的Settings配置方案
你需要在Settings中补充以下核心配置项:
transport.type: 指定为netty4(ES 6.x官方默认的传输实现)http.enabled: 设置为true,开启HTTP服务以支持REST请求- 同时完善集群名称、数据/日志路径等基础配置,避免后续出现其他异常
完整JUnit测试示例
import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.node.Node; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import java.io.IOException; import org.apache.http.HttpHost; public class LocalEsNodeTest { private static Node localEsNode; private static RestHighLevelClient restClient; // 建议用target目录存储测试数据,避免污染项目根目录 private static final String ES_TEST_DIR = "./target/es-test-workspace"; @BeforeClass public static void initLocalEsNode() { // 构建节点配置 Settings settings = Settings.builder() .put("cluster.name", "test-cluster") .put("node.name", "test-single-node") .put("path.home", ES_TEST_DIR) .put("path.data", ES_TEST_DIR + "/data") .put("path.logs", ES_TEST_DIR + "/logs") .put("transport.type", "netty4") .put("http.enabled", true) .put("http.port", 9201) // 指定端口,避免和本地已运行的ES冲突 .put("transport.tcp.port", 9301) .put("node.master", true) .put("node.data", true) .build(); // 启动本地节点 localEsNode = new Node(settings).start(); // 初始化高级REST客户端 RestClientBuilder clientBuilder = RestClient.builder( new HttpHost("localhost", 9201, "http")); restClient = new RestHighLevelClient(clientBuilder); } @Test public void testIndexAndSearchOperations() throws IOException { // 在这里编写你的索引创建、文档写入、搜索查询等测试逻辑 // 示例:创建索引、添加测试文档、执行搜索断言结果 } @AfterClass public static void shutdownLocalEsNode() throws IOException { // 优雅关闭REST客户端 if (restClient != null) { restClient.close(); } // 关闭ES节点,释放资源 if (localEsNode != null) { localEsNode.close(); } } }
额外注意事项
- 确保项目依赖中包含Elasticsearch 6.2的核心包,Maven/Gradle引入
elasticsearch-core即可,它会自动传递netty4相关依赖 ES_TEST_DIR建议使用项目的target目录,测试产生的数据和日志会在构建时被自动清理- 如果本地已经运行了ES服务,一定要指定不同的
http.port和transport.tcp.port,避免端口冲突 - 将节点启动/关闭放在
@BeforeClass和@AfterClass中,确保整个测试类只初始化一次节点,提升测试效率
内容的提问来源于stack exchange,提问作者Edward Wang
相关产品推荐
相关产品推荐

