这是我的krakend.json配置
"async_agent": [
{
"name": "test-agent",
"connection": {
"max_retries": 10,
"backoff_strategy": "exponential-jitter"
},
"consumer": {
"topic": "krakend",
"workers": 5
},
"backend": [
{
"url_pattern": "/greeted",
"method": "POST",
"host": [ "http://127.0.0.1:2999" ],
"disable_host_sanitize": false
}
],
"extra_config": {
"async/amqp": {
"host": "amqp://guest:guest@localhost:5672/",
"name": "krakend",
"exchange": "ApiGatewayExchange",
"durable": true,
"delete": false,
"exclusive": false,
"no_wait": false,
"auto_ack": false
}
}
}
]消息是从服务发送的,类似的情况如下:
export class AppService {
constructor(@Inject('GREETING_SERVICE') private client: ClientProxy){}
getHello(): ResponseDTO {
const responseDTO: ResponseDTO = {
action: 'Hello',
service: 'from service A'
}
this.client.emit('', responseDTO);
return responseDTO;
}
}并导入GREETING_SERVICE配置如下:
imports: [
ClientsModule.register([
{
name: 'GREETING_SERVICE',
transport: Transport.RMQ,
options: {
urls: ['amqp://test:test@localhost:5672/'],
queue: 'krakend'
}
}
])
],最后,这是另一个服务中的端点(让我们调用这个服务-c),它从使用者那里获取消息:
@Post('greeted')
TestHello(@Body() data: any) {
console.log(data)
return data
}该消息成功地作为async_agent在我的krakend文件中设置的设置使用,但该消息没有作为主体提交到该端点。当我对应该传递的数据做一个console.log时,它只会打印{}。
我在这里做错什么了吗?挠了我几个小时的头。
发布于 2022-09-01 07:03:46
您的krakend.json配置的异步部分在我看来不错,但我怀疑您可能遇到的问题。
如今,大多数javascript框架都要求您传递特定的标题,以发挥它们的魔力,如Content-Type或Accept。您必须考虑到,KrakenD将向您的NestJS应用程序传递一组非常精简的标头(据我所知,Accept-Encoding和User-Agent )。
我不熟悉NestJS,但我敢打赌,你需要通过Content-Type,而且你很好。下面是我对配置的建议:
"async_agent": [
{
"name": "test-agent",
"connection": {
"max_retries": 10,
"backoff_strategy": "exponential-jitter"
},
"consumer": {
"topic": "krakend",
"workers": 5
},
"backend": [
{
"url_pattern": "/greeted",
"method": "POST",
"host": [
"http://127.0.0.1:2999"
],
"disable_host_sanitize": false,
"extra_config": {
"modifier/martian": {
"header.Modifier": {
"scope": [
"request"
],
"name": "Content-Type",
"value": "application/json"
}
}
}
}
],
"extra_config": {
"async/amqp": {
"host": "amqp://guest:guest@localhost:5672/",
"name": "krakend",
"exchange": "ApiGatewayExchange",
"durable": true,
"delete": false,
"exclusive": false,
"no_wait": false,
"auto_ack": false
}
}
}
]
}希望这能有所帮助
https://stackoverflow.com/questions/73526505
复制相似问题