spring 数据弹性搜索不是有效的协议版本:这不是 HTTP 端口

spring data elastic search Not a valid protocol version: This is not an HTTP port

我的测试用例中有以下弹性搜索容器配置

    @Container
    public static  GenericContainer container = new GenericContainer<>("elasticsearch:7.7.0")
        .withExposedPorts(9200,9300).withEnv("discovery.type","single-node")
        .withNetwork(Network.newNetwork())
        .withNetworkAliases("someNetwork");

在 @BeforeAll 注释方法中,我像这样 url 属性 elasticsearch

System.setProperty("spring.data.elasticsearch.cluster-nodes", container.getContainerIpAddress() + ":" + container.getMappedPort(9300));

从电源 shell 当我检查 运行ning 容器时(在测试用例调试暂停期间),我在端口列下发现类似这样的内容:0.0.0.0: 32844->9200/tcp, 0.0.0.0:32843->9300/tcp 当我打印 container.getContainerIpAddress() + ":" + container.getMappedPort(9300) 时,我在容器端口列中得到映射到 9300 的相同端口,在此案例 localhost:32843,确保端口是随机的并且在每个新 运行.

中都会更改

当代码 `conf = repo.save(conf); 运行 时,我得到以下异常:

Caused by: org.apache.http.ProtocolException: Not a valid protocol version: This is not an HTTP port at org.apache.http.impl.nio.codecs.AbstractMessageParser.parse(AbstractMessageParser.java:209) at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:245) at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:81) at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:39) at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:114) at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:162) at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:337) at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315) at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276) at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104) at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:591) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: org.apache.http.ParseException: Not a valid protocol version: This is not an HTTP port at org.apache.http.message.BasicLineParser.parseProtocolVersion(BasicLineParser.java:148) at org.apache.http.message.BasicLineParser.parseStatusLine(BasicLineParser.java:366) at org.apache.http.impl.nio.codecs.DefaultHttpResponseParser.createMessage(DefaultHttpResponseParser.java:112) at org.apache.http.impl.nio.codecs.DefaultHttpResponseParser.createMessage(DefaultHttpResponseParser.java:50) at org.apache.http.impl.nio.codecs.AbstractMessageParser.parseHeadLine(AbstractMessageParser.java:156) at org.apache.http.impl.nio.codecs.AbstractMessageParser.parse(AbstractMessageParser.java:207) ... 11 more

`

您正在使用 REST 客户端访问端口 9300 上的 Elasticsearch。这是 TransportClient 的端口。使用 REST 客户端,您需要将端口 9200 作为目标。