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.
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.
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
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With