Vertx的EventBus的send和publish方法有什么区别?

What's the difference between the send and publish methods of Vertx's EventBus?

我第一次接触 Vertx 的 EventBus,我意识到有两种提交消息的方式。使用发送或发布方法。请问:使用这两种方法有什么实际区别,分别在什么场景下使用?

sendpublish都用于向事件总线地址发送消息。不过两者还是有一些区别的。

通过使用 publish:

  • 一条消息被发送给一个或多个听众
  • 所有侦听该地址的处理程序都会收到通知
  • 不需要处理程序的答复

通过使用 send:

  • 一条消息被发送到一个且只有一个针对事件总线地址注册的处理程序。
  • 如果注册了多个处理程序,则只会通知一个。根据文档,接收者将由 "round-robin algorithm" 选择。
  • 接收方可以回复消息,此回复可以为空或包含响应正文。还可以指定响应超时。

在实际使用中,publish 对于通知事件已经发生非常有用,而 send 对于询问响应重要的治疗非常方便。

从概念上讲,publish 使用 publish/subscribe 模式,而 send 使用 request/response 模式。