我正在尝试对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参数添加到客户端的方法中,但是当我这样做时,调用将停止工作。
答案 0 :(得分:1)
您可以执行以下操作...
@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)
}