并非所有命令都是平等的(事件也不是)

主要观点:

  • 在事件驱动架构中通常是 1:n 的事件发送与接收模式,探讨了 1 对多接收方事件的情况,以及若一个服务需监听多个服务的事件时的不同方式。
  • 区分了事件(Event)、查询(Query)和命令(Command),事件描述过去发生的事,无预期响应;查询是请求当前状态信息,有预期响应;命令表达执行操作或改变状态的意图,通常有响应,分为需响应的“ask 命令”和无需响应的“tell 命令”。
  • 对于命令,其通信模式有请求-响应(Request-Response)和火与遗忘(Fire-and-Forget),“tell 命令”类似事件,无响应且通信模式为火与遗忘。
  • 进一步探讨了事件与“tell 命令”的区别,如事件通常由发送方定义模式且是 1:n 关系,“tell 命令”由接收方定义模式且是 n:1 关系等,还提出了“supplier 事件”和“conformist 事件”的概念。
  • 最后讨论在 n:1 情况下,一个服务需监听多个服务时,应使用“conformist 事件”还是“tell 命令”,作者倾向于“conformist 事件”。

关键信息:

  • 事件、查询、命令的特点及区别。
  • “ask 命令”和“tell 命令”的定义及通信模式。
  • 事件与“tell 命令”在模式定义和关系上的不同。
  • 在 n:1 情况下对“conformist 事件”和“tell 命令”的选择。

重要细节:

  • 以通知服务为例,说明监听事件和“tell 命令”的不同方式及优缺点。
  • 提到 Martin Fowler 关于“使用事件作为被动攻击命令”的观点。
  • 阐述作者个人对“conformist 事件”的偏好及仍在学习和探索的态度。
阅读 8
0 条评论