【发布时间】:2020-10-26 23:52:41
【问题描述】:
我没有使用 vert.x 的经验,只是探索,因为它看起来很有趣。
我的问题是,当我们在集群模式下使用带有 infinispan 或 hazelcast 的事件总线时,1 个 jvm 实例向一个地址发送消息,另一个作为消息消费者的 jvm 实例不可用,infinispan 缓冲区会不会并在消费者出现时传递消息并得到处理并回复发送者?
【问题讨论】:
标签: vert.x vertx-eventbus
我没有使用 vert.x 的经验,只是探索,因为它看起来很有趣。
我的问题是,当我们在集群模式下使用带有 infinispan 或 hazelcast 的事件总线时,1 个 jvm 实例向一个地址发送消息,另一个作为消息消费者的 jvm 实例不可用,infinispan 缓冲区会不会并在消费者出现时传递消息并得到处理并回复发送者?
【问题讨论】:
标签: vert.x vertx-eventbus
如果给定地址没有注册 EventBus 消费者,消息发送者将收到一个错误,指出在指定地址找不到消费者。当消费者可用时,消息将不会被缓冲和传递。 Vert.x manual中提到了这一点:
消息发送可能因其他原因而失败,包括:
没有可用于将消息发送到的处理程序
收件人已使用 fail 明确地使邮件失败
在所有情况下,回复处理程序都将使用特定的 失败。
之所以这样工作,是因为 Vert.x 无法知道消费者是否会出现来处理消息,因此它不会尝试等待看是否会出现。如果您有这种用例,则需要在客户端进行重试编码。一般来说,Vert.x 使用它所谓的"Best-effort delivery",因此用户可以自行提供他们需要的任何类型的可靠性保证。
【讨论】: