From 62ae768540c451c098fb2dd90d718add7d822c4c Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Wed, 9 Apr 2014 17:32:16 +0530 Subject: [PATCH] CLOUDSTACK-6365: support virtual host and ssl in rabbitMQ event bus with this fix, virtual host on the AMQP server can be specified. Also SSL can be used for connection between management server and AMQP servers. (cherry picked from commit bc17f177760b3b61f1df7ed9728738ffe64896d5) Signed-off-by: Rohit Yadav --- .../mom/rabbitmq/RabbitMQEventBus.java | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java b/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java index 478c8d7aaed..30b4475a738 100644 --- a/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java +++ b/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java @@ -48,6 +48,18 @@ public class RabbitMQEventBus extends ManagerBase implements EventBus { private static String username; private static String password; + public static void setVirtualHost(String virtualHost) { + RabbitMQEventBus.virtualHost = virtualHost; + } + + private static String virtualHost; + + public static void setUseSsl(String useSsl) { + RabbitMQEventBus.useSsl = useSsl; + } + + private static String useSsl; + // AMQP exchange name where all CloudStack events will be published private static String amqpExchangeName; @@ -92,6 +104,12 @@ public class RabbitMQEventBus extends ManagerBase implements EventBus { throw new ConfigurationException("Unable to get the port details of AMQP server"); } + if (useSsl != null && !useSsl.isEmpty()) { + if (!useSsl.equalsIgnoreCase("true") && !useSsl.equalsIgnoreCase("false")) { + throw new ConfigurationException("Invalid configuration parameter for 'ssl'."); + } + } + if (retryInterval == null) { retryInterval = 10000;// default to 10s to try out reconnect } @@ -341,9 +359,18 @@ public class RabbitMQEventBus extends ManagerBase implements EventBus { ConnectionFactory factory = new ConnectionFactory(); factory.setUsername(username); factory.setPassword(password); - factory.setVirtualHost("/"); factory.setHost(amqpHost); factory.setPort(port); + + if (virtualHost != null && !virtualHost.isEmpty()) { + factory.setVirtualHost(virtualHost); + } else { + factory.setVirtualHost("/"); + } + + if (useSsl != null && !useSsl.isEmpty() && useSsl.equalsIgnoreCase("true")) { + factory.useSslProtocol(); + } Connection connection = factory.newConnection(); connection.addShutdownListener(disconnectHandler); _connection = connection;