用户登录

打开 nest-2 里的 AppController,需要在这个文件里,从 @nestjs/microservices 里面导入一些东西。然后在这个控制器里添加一个方法,方法的名字是 log,这个方法用 @EventPattern 装饰一下,给它一个参数,值设置成 log。 这样这个服务会订阅 log 这种事件,发生这种事件,就会执行这里的这个 log 方法。

方法里面添加一个参数,参数用 @Payload 装饰一下,参数的名字叫 data,类型是 string。在这个方法里面,用 console.log 可以在控制台上输出一行文字, Log event 括号,nest-2,后面再加上信息里带的数据。

复制一下这个控制器里的内容,再打开 nest-3 里的 AppController,用复制的内容替换一下这个文件里的内容。在 nest-3 这个微服务里面,同样可以在这个 AppController 订阅一下 log 事件。

收到这个事件以后,要做的事情是在控制台输出 Log event,加上一个 nest-3 ,然后是事件里带的数据。

现在,在 nest-2 还有 nest-3 这两个微服务里面都订阅了一种叫 log 的事件,如果有服务通过 Redis 发布了一个 log 事件,nest-2 还有 nest-3 都会收到这个事件,然后自己再去决定怎么样处理这个事件。

客户端

下面找个服务,用微服务客户端触发一个 log 事件,可以打开 ninghao-nest 里的 AppModule 模块,在这个模块里之前已经导入了 ClientsModule,用 register 方法配置了一下,在这个配置列表里面,再添加一个项目,一个对象,先用 name 设置一个名字,比如 REDIS,等会儿会用到这个名字注入使用这个客户端。

transport 设置成 Transport.REDIS 这种传输方法。 添加一个 options,在它里面用 url 设置一下 Redis 数据库的地址,redis://localhost:6379 。

打开 ninghao-nest 下面的 AppController, 在这个控制器里可以用一下 REDIS 这个客户端,先把它注入进来,在构造方法里面,用 @Inejct 装饰器,给它的参数值设置成 REDIS ,添加一个参数属性,private readonly,名字叫 clientRedis,类型设置成 ClientProxy 。

下面可以在这个 getHello 方法里面,用一下这个 clientRedis 客户端。

this.clientRedis 用一下它上面的 emit 发布一个事件,名字是 log,再设置一下这个事件带的数据,比如用一个字符串数据,hello ~

解释

用这个 Redis 客户端,发布的事件,会放到 redis 那里,nest-2 还有 nest-3 应用里同时订阅了这个发布的事件,它们可以各自决定怎么样处理这个事件。

预览

回到终端,新建一个标签,可以运行一下 ninghao-nest 这个应用, nest start ninghao-nest --watch,这个应用运行以后,就可以使用一个 Http 客户端请求一下应用的根。

可以再新建一个标签,然后直接用 curl 这个命令,请求一下 http://localhost:3000 这个地址。

返回的是个错误信息,状态码是 500,提示内部服务错误,检查一下运行 ninghao-nest 应用的终端标签,提示连接 127.0.0.1:5555 的时候出问题了。这是因为,在我们项目里还有一个服务没有启动。

不过在 nest-2 还有 nest-3 这两个微服务里面,都正常的处理了发布的 log 事件。

下面可以再运行一下 nest-1 这个应用,nest start nest-1 --watch。

新建一个终端标签,重新再用 curl 请求一下 http://localhost:3000 。请求 ninghao-nest 这个应用的根,会执行 AppController 控制器里的这个 getHello 方法,也就会用 Redis 这个客户端发布一个 log 事件。

打开运行 nest-2 的终端,这里输出了一条信息,Log event (nest-2): hello ~ 在 nest-2 这个应用的 AppController 里面,订阅了一下 log 事件,会用这个控制器的 log 方法来处理,这个方法做的事情就是在控制台上输出这条信息。

再打开运行 nest-3 的终端,这里输出的是 Log event (nest-3): hello ~ 同样在 nest-3 应用里也订阅了 log 事件,事件的处理方法要做的事情就是输出这行文字。

使用 Redis 在服务之间交换信息/事件《 企业应用架构:微服务 》

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点