事件总线(Event Bus) - 确认消息/发送答复

优质
小牛编辑
132浏览
2023-12-01

当使用send event bus 尝试将消息传递到event bus中注册的MessageConsumer

在某些情况下是有用的,发送者知道什么时候,消费者已经收到了消息和”processing”。

要确认该消息已被处理,消费者可以通过调用reply对消息进行回复。

当发生这种情况时,它会导致一个回复,发送回发送端和应答处理程序被调用的答复。

一个例子可以说明这一点:

接收:

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

发送:

  1. eventBus.send("news.uk.sport", "Yay! Someone kicked a ball across a patch of grass", ar -> {
  2. if (ar.succeeded()) {
  3. System.out.println("Received reply: " + ar.result().body());
  4. }
  5. });

应答可以包含一个消息体,它包含有用的信息。

“processing”实际上指的是应用程序定义和完全取决于在什么消息上消费者并不是 Vert.x event bus 本身知道或关心的东西。

一些例子:

  • 一个简单的消息消费者,它实现了一个服务,它返回的时间是一天中的时间,将确认一个消息,包含时间的答复正文
  • 如果消息被成功地保存在存储中,或不正确的话,它将实现一个持久队列的消息,如果消息被成功地保存,可能会对其进行应答。
  • 如果消息成功处理,它可以从数据库中删除