Use socket client with NestJs microservice

ⅰ亾dé卋堺 提交于 2020-03-05 04:14:10

问题


I started working with NestJs recently and got stock while trying to test my NestJs microservices app using a TCP client

Is it possible to trigger an @EventPattern or @MessagePattern() using a non-nest app?

When trying this method the the socket client just stuck on trying to connect.

Any ideas?

Thanks.


回答1:


Update Feb 2020

Since nest v6.6.0, it has become easier to integrate external services with a message de/serializer.
Have a look at the corresponding PR.


Original Answer

You have to set up the ports correctly to use it with nest:

The pattern you want to send is

<json-length>#{"pattern": <pattern-name>, "data": <your-data>[, "id": <message-id>]}

Example:

76#{"pattern":"sum","data":[0,3,3],"id":"ce51ebd3-32b1-4ae6-b7ef-e018126c4cc4"}

The parameter id is for @MessagePattern, without it @EventPattern will be triggered.

In your main.ts you setup the nest server. That's the port you want to send to from Packet Sender (enter at 1).

const app = await NestFactory.createMicroservice(AppModule, {
  transport: Transport.TCP,
  options: { host: 'localhost', port: 3005 },
  //                            ^^^^^^^^^^
});

Then you want your nest @Client to listen to messages coming from Packet Sender (see position 2 in image)

@Client({
  transport: Transport.TCP,
  options: { host: 'localhost', port: 52079 },
  //                            ^^^^^^^^^^^  
})
private client: ClientTCP;

Then connect your client:

async onModuleInit() {
  await this.client.connect();
}

and define a @MessagePattern:

@MessagePattern('sum')
sum(data: number[]): number {
  console.log(data);
  return data.reduce((a, b) => a + b, 0);
}

As you can see, in the example I'm sending [0,3,3] and nest correctly responds with the sum 6.



来源:https://stackoverflow.com/questions/55628093/use-socket-client-with-nestjs-microservice

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!