问题描述
我有两个微服务。第一个微服务是前端服务器,它要求第二个微服务实例之一进行某些工作。 NATS传输的最佳解决方案是排队。我可以发送消息,NATS只会将其发送到实例之一。但是那是否需要向每个队列实例发送消息或事件?
前台服务:
//module
providers: [
...,{
provide: 'CLIENT_PROXY_FACTORY',useFactory: (configService: ConfigService) => {
return ClientProxyFactory.create(configService.get('microservice'));
},inject: [ConfigService],}
],
// service
constructor(
@Inject('CLIENT_PROXY_FACTORY')
private nats: ClientProxy,) {
}
// in some method
method() {
this.nats.emit('test',0);
this.nats.send('test1',true).toPromise();
}
工人服务:
// bootstrap
transport: Transport.NATS,options: {
url: 'nats://127.0.0.1:4222',queue: 'worker'
}
// controller
@MessagePattern('test')
messagefunc() {
console.log('Got message!');
}
@EventPattern('test1')
eventfunc() {
console.log('Got event!');
}
所以。在我的示例中,我需要创建Worker service
的2个或更多实例。我需要一个解决方案,如何有时将事件或消息传递给所有Worker service
实例?
解决方法
让工作人员服务订阅两个主题:
- 队列组中的主题A。发布到A的邮件将仅发送给一位工作人员。
- 没有队列组的主题B。发布到B的邮件将发送给所有工作人员。
对不起,无法告诉您如何在NestJS中实现此功能。