Передача пользовательских заголовков в декларативном клиенте Micronaut - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь использовать проект Micronaut, чтобы добавить к нему распределенную трассировку (я знаю, что Micronaut уже поддерживает его, но у меня есть веская причина для этого).Для этого мне нужно передать пользовательские заголовки HTTP, которые содержат сериализованный контекст, который должен передаваться между микросервисами.

Я попытался создать фильтр.Однако фильтр запускается только после возврата метода контроллера, что означает, что контекст теряется к моменту вызова фильтра.

Вот метод, который я хочу применить:

@Get('/pets')
    Single<List<Pet>> pets() {
        petClient.list()
                .onErrorReturnItem(Collections.emptyList())
    } 

А вот и клиент:

@Client(id = 'pets', path = "/v1/pets")
interface PetClient extends PetOperations < Pet > {

      @Override
      Single <List<Pet>> byVendor(String name)

      @Override
      Maybe < Pet > find(String slug)
  }

Я также пытался добавить параметр @Header в методы клиента, но когда я это сделал, вызовы перестали работать.

1 Ответ

2 голосов
/ 24 мая 2019

Вы можете сделать что-то вроде этого ...

@Client(id = 'pets', path = "/v1/pets")
interface PetClient extends PetOperations < Pet > {

    @Override
    @Header(name="some-header-name", value="some-value")
    Single <List<Pet>> byVendor(String name)

    @Override
    Maybe < Pet > find(String slug)
}

Вы также можете сделать что-то подобное ...

@Client(id = 'pets', path = "/v1/pets")
interface PetClient extends PetOperations < Pet > {

    @Override
    // this will result in a header named "someHeaderName"
    Single <List<Pet>> byVendor(String name, @Header String someHeaderName)

    @Override
    Maybe < Pet > find(String slug)
}

Вы также можете сделать что-то подобное ...

@Client(id = 'pets', path = "/v1/pets")
interface PetClient extends PetOperations < Pet > {

    @Override
    Single <List<Pet>> byVendor(String name, @Header('some-header-name') String someValue)

    @Override
    Maybe < Pet > find(String slug)
}
...