Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

No way to use RPC client from service #63

Closed
artaommahe opened this issue May 14, 2017 · 10 comments
Closed

No way to use RPC client from service #63

artaommahe opened this issue May 14, 2017 · 10 comments

Comments

@artaommahe
Copy link

artaommahe commented May 14, 2017

  1. RPC client cant be defined in service
  2. Controller (with defined RPC client) cannot be injected in service to call RCP actions via controller methods
  3. Controller cant be RPC client without defining @RequestMapping() on some method (try to remove method with @RequestMapping from controller and in controller constructor call this.client.send() after some timeout, this.client will be null)

Just got example from documentation (Client section) and tried all above.
IMHO the most important is 2 issue cause it's useful to have controllers that works with all transport (http/ws/rpc) things and services for all other work. So service should be able to inject appropriate controller to call RPC client action or send smth away via websocket.

Update. Or maybe we can move RPC client/server to Gateway? They can be injected into anything and rpc has same interaction logic as websocket (ability to receive and send messages).

@Yiin
Copy link

Yiin commented May 14, 2017

Service that injects a controller sounds so wrong.

@artaommahe
Copy link
Author

artaommahe commented May 14, 2017

Service that injects a controller sounds so wrong

service that cant use rpc requests sound wrong too :) controllers are just transport handling buffer and inability to call rpc from main app part - services - looks strange.
Also we have gateways that are same as controllers but for websocket and they can be injected to services 😶

@kamilmysliwiec
Copy link
Member

Hi @artaommahe,

try to remove method with @RequestMapping from controller and in controller constructor call this.client.send() after some timeout, this.client will be null

It is quite interesting. Do you still have this issue after latest update?
By the way, it should be possible to create @Client() in both controllers and components.

@artaommahe
Copy link
Author

@kamilmysliwiec here it is
https://github.com/artaommahe/nest-63

yarn
yarn run start

after 3 seconds

service client null
controller client null

@artaommahe
Copy link
Author

@kamilmysliwiec i checked more - issue due to constructor() {} defined in both controller and service. So this will not work with explicitly defined constructor like so

  @Client({ transport: Transport.TCP, port: 65441 })
  private client: ClientProxy;

  constructor() {

    setTimeout(() => console.log('service client', this.client), 3000);
  }

In same repo remove service constructor, inject service into controller and call service method from controller and it works fine.

export class RpcClientController {

  constructor(private rpcClientService: RpcClientService) {

    setTimeout(() => console.log('controller client', this.rpcClientService.get()), 3000);
  }

Hope this will work with defined constructor in future.

@kamilmysliwiec
Copy link
Member

Hi @artaommahe,
Let's use OnModuleInit (https://docs.nestjs.com/lifecycle-events.html) lifecycle event instead of constructor.

@artaommahe
Copy link
Author

@kamilmysliwiec but how can i inject smth in service if using constructor breaks RPC client creation?)

@kamilmysliwiec
Copy link
Member

Since 3.0.0 constructor shouldn't break RPC client creation. You can inject dependencies through constructor, but interact with them after module init event.

@artaommahe
Copy link
Author

@kamilmysliwiec moved console.log check to onModuleInit and it works, thx

@lock
Copy link

lock bot commented Sep 25, 2019

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

@lock lock bot locked as resolved and limited conversation to collaborators Sep 25, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants