Почему Micronaut отказывается от всего после имени хоста для конфигурации URL клиента? - PullRequest
0 голосов
/ 02 мая 2020

При настройке клиентов Micronaut Http в application.yaml Я не знал, что url должен быть только именем хоста и портом, если что-либо, кроме имени хоста и порта, включено, то он удаляется Micronaut, когда выбирает хост для вызова. Документация Micronaut Настройка Http-клиентов явно не предупреждает читателя об этом поведении.

Ожидается ли такое поведение? Если так, то какие есть варианты для пользователей, которые имеют дело с длинными URI, например: http://localhost:8080/application-name/v1.0/controller-name/endpoint

Демонстрационный код

BadClient. java

@Client("bad-client")
public interface BadClient {
    @Get("/hello")
    Maybe<String> getHello();
}

GoodClient. java

@Client("good-client")
public interface GoodClient {
    @Get("/server2/hello")
    Maybe<String> getHello();
}

application.yaml

micronaut:
  application:
    name: micronaut-client-issues
  http:
    services:
      bad-client:
        urls:
          - http://localhost:8080/server2
      good-client:
        urls:
          - http://localhost:8080
  server:
    port: 8080
    cors:
      enabled: true

Когда используется хороший клиент, он работает как положено, но плохой клиент выдает «Страница 404 не найдена» со следующими данными журнала:

18:35:05.927 [nioEventLoopGroup-1-2] DEBUG io.micronaut.context.DefaultBeanContext - Registering singleton bean io.micronaut.http.client.DefaultHttpClient@2b80242 for type [@Named('bad-client') io.micronaut.http.client.HttpClient] using bean key @Named('bad-client') io.micronaut.http.client.DefaultHttpClient
18:35:05.966 [nioEventLoopGroup-1-3] DEBUG io.micronaut.http.client.DefaultHttpClient - Sending HTTP Request: GET /hello
18:35:05.966 [nioEventLoopGroup-1-3] DEBUG io.micronaut.http.client.DefaultHttpClient - Chosen Server: localhost(8080)
18:35:05.985 [nioEventLoopGroup-1-4] DEBUG io.micronaut.http.server.netty.NettyHttpServer - Server localhost:8080 Received Request: GET /hello
18:35:05.985 [nioEventLoopGroup-1-4] DEBUG io.micronaut.http.server.netty.RoutingInBoundHandler - Matching route GET - /hello
18:35:05.985 [nioEventLoopGroup-1-4] DEBUG io.micronaut.http.server.netty.RoutingInBoundHandler - No matching route found for URI /hello and method GET
18:35:05.989 [nioEventLoopGroup-1-4] DEBUG io.micronaut.web.router.RouteMatchUtils - Route match attribute for request (/hello) not found

1 Ответ

0 голосов
/ 04 мая 2020

URL-адреса должны быть просто URL-адресом без пути. Если вы хотите указать контекстный путь, вы можете сделать это через config:

micronaut:
  http:
    services:
      bad-client:
        urls:
          - http://localhost:8080
        path: /server2

См. https://docs.micronaut.io/latest/guide/configurationreference.html#io .micronaut.http.client.ServiceHttpClientConfiguration

...