event.mdc 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. ---
  2. description: 事件(Event)
  3. globs:
  4. ---
  5. # 事件(Event)
  6. 事件是开发过程中经常使用到的功能,我们经常利用它来做一些解耦的操作。如:更新了用户信息,其他需要更新相关信息的操作自行监听更新等
  7. ## 新建监听
  8. ```ts
  9. import { Provide, Scope, ScopeEnum } from "@midwayjs/core";
  10. import { CoolEvent, Event } from "@cool-midway/core";
  11. /**
  12. * 接收事件
  13. */
  14. @CoolEvent()
  15. export class DemoEvent {
  16. /**
  17. * 根据事件名接收事件
  18. * @param msg
  19. * @param a
  20. */
  21. @Event("updateUser")
  22. async updateUser(msg, a) {
  23. console.log("ImEvent", "updateUser", msg, a);
  24. }
  25. }
  26. ```
  27. ## 发送事件
  28. ```ts
  29. import { Get, Inject, Provide } from "@midwayjs/core";
  30. import {
  31. CoolController,
  32. BaseController,
  33. CoolEventManager,
  34. } from "@cool-midway/core";
  35. /**
  36. * 事件
  37. */
  38. @CoolController()
  39. export class DemoEventController extends BaseController {
  40. @Inject()
  41. coolEventManager: CoolEventManager;
  42. /**
  43. * 发送事件
  44. */
  45. @Get("/send")
  46. public async send() {
  47. this.coolEventManager.emit("updateUser", { a: 1 }, 12);
  48. }
  49. }
  50. ```
  51. ## 多进程通信
  52. 当你的项目利用如`pm2`等工具部署为 cluster 模式的时候,你的项目会有多个进程,这时候你的事件监听和发送只会在当前进程内有效,如果你需要触发到所有或者随机一个进程,需要使用多进程通信,这里我们提供了一个简单的方式来实现多进程通信。
  53. 需要根据你的业务需求来使用该功能!!!
  54. ```ts
  55. import { Get, Inject, Provide } from "@midwayjs/core";
  56. import {
  57. CoolController,
  58. BaseController,
  59. CoolEventManager,
  60. } from "@cool-midway/core";
  61. /**
  62. * 事件
  63. */
  64. @Provide()
  65. @CoolController()
  66. export class DemoEventController extends BaseController {
  67. @Inject()
  68. coolEventManager: CoolEventManager;
  69. @Post("/global", { summary: "全局事件,多进程都有效" })
  70. async global() {
  71. await this.coolEventManager.globalEmit("demo", false, { a: 2 }, 1);
  72. return this.ok();
  73. }
  74. }
  75. ```
  76. **globalEmit**
  77. ```ts
  78. /**
  79. * 发送全局事件
  80. * @param event 事件
  81. * @param random 是否随机一个
  82. * @param args 参数
  83. * @returns
  84. */
  85. globalEmit(event: string, random?: boolean, ...args: any[])
  86. ```