Implement 3.4.0-rc2 events broker API version

Bug: Issue 14465
Change-Id: Ibca25c7f68bf25648a5f316b77db9c59a387ee4e
diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl
index 63b890d..4501db7 100644
--- a/external_plugin_deps.bzl
+++ b/external_plugin_deps.bzl
@@ -16,8 +16,8 @@
 
     maven_jar(
         name = "events-broker",
-        artifact = "com.gerritforge:events-broker:3.4.0-rc0",
-        sha1 = "8c34c88103d4783eb4c4decde6d93541bc1cf064",
+        artifact = "com.gerritforge:events-broker:3.4.0-rc2",
+        sha1 = "f72b4166e6d785fd1a41c997a4ffb14461dd7d87",
     )
 
     maven_jar(
diff --git a/src/main/java/com/googlesource/gerrit/plugins/websession/broker/BrokerBasedWebSessionCache.java b/src/main/java/com/googlesource/gerrit/plugins/websession/broker/BrokerBasedWebSessionCache.java
index 678d246..bc78599 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/websession/broker/BrokerBasedWebSessionCache.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/websession/broker/BrokerBasedWebSessionCache.java
@@ -20,6 +20,10 @@
 import com.google.common.cache.CacheStats;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.flogger.FluentLogger;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
 import com.google.gerrit.common.Nullable;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.events.LifecycleListener;
@@ -246,7 +250,6 @@
 
     @Override
     public void run() {
-      boolean succeeded = false;
       try (ByteArrayOutputStream out = new ByteArrayOutputStream();
           ObjectOutputStream objectOutputStream = new ObjectOutputStream(out)) {
 
@@ -255,14 +258,27 @@
         byte[] serializedObject = out.toByteArray();
         WebSessionEvent webSessionEvent = new WebSessionEvent(key, serializedObject, operation);
         EventMessage message = brokerApi.get().newMessage(UUID.randomUUID(), webSessionEvent);
-        succeeded = brokerApi.get().send(webSessionTopicName, message);
-        if (succeeded) {
-          webSessionLogger.log(
-              Direction.PUBLISH, webSessionTopicName, webSessionEvent, Optional.ofNullable(value));
-        } else {
-          logger.atSevere().log(
-              "Cannot send web-session message for '%s Topic: '%s'", key, webSessionTopicName);
-        }
+        ListenableFuture<Boolean> resultF = brokerApi.get().send(webSessionTopicName, message);
+        Futures.addCallback(
+            resultF,
+            new FutureCallback<Boolean>() {
+              @Override
+              public void onSuccess(Boolean aBoolean) {
+                webSessionLogger.log(
+                    Direction.PUBLISH,
+                    webSessionTopicName,
+                    webSessionEvent,
+                    Optional.ofNullable(value));
+              }
+
+              @Override
+              public void onFailure(Throwable throwable) {
+                logger.atSevere().log(
+                    "Cannot send web-session message for '%s Topic: '%s'",
+                    key, webSessionTopicName);
+              }
+            },
+            MoreExecutors.directExecutor());
       } catch (IOException e) {
         logger.atSevere().withCause(e).log(
             "Cannot serialize event for account id '%s': [Exception: %s]", value.getAccountId());