Set event.type to default routingKey
The type of the event is much more useful than a static routingKey.
Keep using the routingKey from the config if specified for backwards
compatibility.
Bug: Issue 16775
Change-Id: I38e7da53fef3ad19e2f8ea551290d09fe8db2fc9
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/MessagePublisher.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/MessagePublisher.java
index 0a35f54..8096556 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/MessagePublisher.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/MessagePublisher.java
@@ -181,7 +181,7 @@
}
private boolean publishEvent(Event event) {
- return session.publish(gson.toJson(event));
+ return session.publish(gson.toJson(event), event.type);
}
private void connect() {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/Session.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/Session.java
index 7d0669f..841ed8f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/Session.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/Session.java
@@ -20,5 +20,5 @@
void disconnect();
- boolean publish(String message);
+ boolean publish(String message, String eventType);
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java
index 5b2e0d2..e0ee829 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java
@@ -163,18 +163,25 @@
}
@Override
- public boolean publish(String messageBody) {
+ public boolean publish(String messageBody, String eventType) {
if (channel == null || !channel.isOpen()) {
channel = getChannel();
}
if (channel != null && channel.isOpen()) {
+ String routingKey;
Message message = properties.getSection(Message.class);
+ if (message.routingKey != null && !message.routingKey.isEmpty()) {
+ // Set routingKey from configuration.
+ routingKey = message.routingKey;
+ } else {
+ routingKey = eventType;
+ }
Exchange exchange = properties.getSection(Exchange.class);
try {
logger.atFine().log("Sending message.");
channel.basicPublish(
exchange.name,
- message.routingKey,
+ routingKey,
properties.getAMQProperties().getBasicProperties(),
messageBody.getBytes(CharEncoding.UTF_8));
return true;
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index dced3c4..76ba7ce 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -71,7 +71,8 @@
* The priority of message. if not specified, defaults to 0.
* `message.routingKey`
- * The name of routingKey. This is stored to message property.
+ * The name of routingKey. This is stored to message property. If not specified, defaults to
+ the type of the Gerrit event (e.g. "patchset-created", "change-merged").
* `gerrit.name`
* The name of gerrit(not hostname). This is your given name to identify your gerrit.
@@ -116,7 +117,7 @@
|exchange.name | **gerrit.publish**
|message.deliveryMode | 1
|message.priority | 0
-|message.routingKey | *Empty*
+|message.routingKey | **event.type**
|gerrit.name | *Empty*
|gerrit.hostname | *Empty*
|gerrit.scheme | **ssh**