使用 Kafka 在 Rebus 中手动提交

Manually commiting in Rebus with Kafka

使用 Kafka 作为 this lib 的传输方式,Rebus 是否有办法控制消费者何时提交消息?我想消费来自 Kafka 的一个事件,做一些可能 except/fail 的工作,只有当它成功时才告诉 Kafka 向前移动偏移量。

我是您使用的库的作者 "Rebus.Kafka"。您只能通过取消订阅来完全停止接受出版物。然后回滚偏移量并重新处理队列。想要停止处理消息是公交车用户不自然的愿望。 作为停止总线的替代方法,您可以考虑以下选项:

  1. Handler pipeline
  2. Automatic retries and error handling
  3. Workers and parallelism

请提供您要实施的更详细的案例。

加法:

如果您对默认选项EnableAutoCommit = true 不满意,您可以设置它的值,以及配置参数中生产者和消费者的所有其他参数。

EnableAutoCommit = false,

使用传输 "Rebus.Kafka" 的示例显示了如何完成此操作:https://github.com/glazkovalex/Rebus.Kafka/blob/master/Examples/Scaleout。 Producer/Program.cs

请注意,当前版本的传输禁用了自动提交,接收到五个消息并在处理后移动指针。换句话说,如果服务在禁用 autoCommit 的情况下中断,则服务在重新启动时最多可以重新处理 5 条消息。这些重新处理的消息的数量可以在传输的未来版本中更改 "Rebus.Kafka"