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 接收到的每条消息在上下文中都保存着一些有用的值: