事件总线 API

让我们跳进 API

获取事件总线

你获取到事件总线的引用,如下所示:

  1. EventBus eb = vertx.eventBus();

还有每个 Vert.x 实例事件总线的单个实例。

注册处理程序

这个最简单的方法来注册一个处理程序用consumer。下面是一个示例:

  1. EventBus eb = vertx.eventBus();
  2. eb.consumer("news.uk.sport", message -> {
  3. System.out.println("I have received a message: " + message.body());
  4. });

当邮件到达您的处理程序时,将调用您的处理程序,在message中传递.

从对 consumer() 的调用返回的对象是一个实例MessageConsumer
随后,此对象可以用于注销处理程序中,或使用处理程序以流的形式。

或者你可以使用consumer对返回 MessageConsumer 与没有处理程序设置,然后在那设置处理程序。例如:

  1. EventBus eb = vertx.eventBus();
  2. MessageConsumer<String> consumer = eb.consumer("news.uk.sport");
  3. consumer.handler(message -> {
  4. System.out.println("I have received a message: " + message.body());
  5. });

注册时聚集的事件总线上的一个处理程序,它可以有一些时间为要达到该群集的所有节点的登记。

如果你想要这已完成时通知,您可以注册的 MessageConsumer 对象上completion handler。

  1. consumer.completionHandler(res -> {
  2. if (res.succeeded()) {
  3. System.out.println("The handler registration has reached all nodes");
  4. } else {
  5. System.out.println("Registration failed!");
  6. }
  7. });
未注册的处理程序

若要撤消注册的处理程序,调用unregister.

如果你在一个群集事件总线,未登记可能需要一些时间来传播跨节点,如果你想要这完成后通知使用unregister.

  1. consumer.unregister(res -> {
  2. if (res.succeeded()) {
  3. System.out.println("The handler un-registration has reached all nodes");
  4. } else {
  5. System.out.println("Un-registration failed!");
  6. }
  7. });