0

我没有使用 vert.x 的经验,只是探索,因为它看起来很有趣。

我的问题是,当我们在集群模式下使用带有 infinispan 或 hazelcast 的事件总线时,1 个 jvm 实例向一个地址发送消息,另一个作为消息消费者的 jvm 实例不可用,infinispan 会缓冲并传递当消费者出现并得到处理并回复发件人时的消息?

4

1 回答 1

1

如果没有为给定地址注册 EventBus 消费者,则消息发送者将收到一条错误消息,指出在指定地址找不到消费者。当消费者可用时,消息将不会被缓冲和传递。Vert.x 手册中提到了这一点:

消息发送可能由于其他原因而失败,包括:

  • 没有可用于将消息发送到的处理程序

  • 收件人已使用 fail 明确地使消息失败

在所有情况下,都会以特定的失败调用回复处理程序。

之所以这样工作,是因为 Vert.x 无法知道消费者是否会出现来处理消息,因此它不会尝试等待看是否会出现。如果您有这种用例,则需要在客户端进行重试编码。一般来说,Vert.x 使用它所谓的“尽力交付”,因此用户可以自行提供他们需要的任何类型的可靠性保证。

于 2020-07-06T20:08:54.317 回答