spring data elasti c search Недопустимая версия протокола: это не порт HTTP - PullRequest
0 голосов
/ 26 мая 2020

У меня есть следующая конфигурация контейнера elasti c -search в моем тестовом примере

    @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));

From power shell, когда я проверяю запущенные контейнеры (во время паузы отладки тестового примера), я нахожу что-то вроде этого в столбце портов: 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); run, я получаю следующее исключение:

Вызвано: org. apache .http.ProtocolException: Недопустимая версия протокола: это не HTTP-порт в организации apache. http.impl.nio.codecs.AbstractMessageParser.parse (AbstractMessageParser. java: 209) в org. * 1 030 * .http.impl.nio.DefaultNHttpClientConnection.consumeInput (DefaultNHttpClientConnection. java: 245) в org. apache .http.impl.nio.client.InternalIODispatch.onInputReady (InternalIODispatch. * 10) . apache .http.impl.nio.client.InternalIODispatch.onInputReady (InternalIODispatch. java: 39) в org. apache .http.impl.nio.reactor.AbstractIODispatch.inputReady (AbstractIODispatch. java: 114) в орг. apache .http.impl.nio.reactor.BaseIOReactor.readable (BaseIOReactor. java: 162) в орг. apache .http.impl.nio.reactor.AbstractIOReactor.processEvent (AbstractIOReactor. java: 337) в орг. apache .http.impl.nio.reactor.AbstractIOReactor.processEvents (AbstractIOReactor. java: 315) в организации apache .http.impl.nio.reactor.AbstractIOReactor. выполнить (AbstractIOReactor. java: 276) в организации apache .http.impl.nio.reactor.BaseIOReactor.execute (BaseIOReactor. java: 104) в организации apache .http.impl.nio. response.AbstractMultiworkerIOReactor $ Worker.run (AbstractMultiworkerIOReactor. java: 591) на java .base / java .lang.Thread. run (Thread. java: 834) Вызвано: org. apache .http.ParseException: недопустимая версия протокола: это не порт HTTP в организации apache .http.message.BasicLineParser.parseProtocolVersion ( BasicLineParser. java: 148) в орг. apache .http.message.BasicLineParser.parseStatusLine (BasicLineParser. java: 366) в орг. apache .http.impl.nio.codecs.DefaultHttpResponseParse DefaultHttpResponseParser. java: 112) в организации apache .http.impl.nio.codecs.DefaultHttpResponseParser.createMessage (DefaultHttpResponseParser. java: 50) в организации apache .http.impl.nio AbstractMessageParser.parseHeadLine (AbstractMessageParser. java: 156) в org. apache .http.impl.nio.codecs.AbstractMessageParser.parse (AbstractMessageParser. java: 207) ... еще 11

`

1 Ответ

2 голосов
/ 26 мая 2020

Вы используете REST-клиент для доступа к Elasticsearch через порт 9300. Это порт для TransportClient. С клиентом REST вам нужно выбрать порт 9200.

...