Configuration



Handler


首先,您需要实现 HandlerFunc:



Router.AddHandler



参见入门的示例用法:



No publisher handler


Router.AddNoPublisherHandler



Ack


默认情况下,当 handfunc 没有返回错误时,会调用 msg.Ack()。如果返回一个错误,msg.Nack() 将被调用。因此,您不必在处理消息后调用 msg.Ack() 或 msg.Nack() (当然,如果您愿意,也可以这样做)。


Producing messages


从处理程序返回多条消息时,请注意,大多数 Publisher 实现都不支持消息的原子发布。如果代理或存储不可用,它可能最终仅产生一些消息并发送 msg.Nack()。

如果这是一个问题,考虑使用每个处理程序只发布一条消息。


Running the Router


要运行 Router,你需要调用 run()。



Ensuring that the Router is running


Running()



Execution models


订阅者可以一次使用一条消息,也可以并行使用多条消息。

  • 单消息流是最简单的方法,这意味着在调用msg.Ack()之前,订阅者不会收到任何新消息。
  • 只有某些订阅者支持多个消息流。通过一次订阅多个主题分区,多个消息可以同时被使用,即使是之前没有被ack的消息(例如,Kafka订阅器是这样工作的)。路由器通过运行并发处理函数来处理这个模型,每个分区一个处理函数。

请参阅所选的 Pub/Sub 文档以获取受支持的执行模型。


Middleware



在 Middlewares 中可以找到标准中间件的完整列表。


Plugin



完整的标准插件列表可以在 message/router/plugin 中找到。


Context


handler 接收到的每条消息在上下文中都保存着一些有用的值: