Java tutorial
package org.atmosphere.samples.pubsub.rabbitmq; /* * Copyright 2014 Jeanfrancois Arcand * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import org.atmosphere.cpr.AtmosphereConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; /** * RabbitMQ Connection Factory. * * @author Thibault Normand * @author Jean-Francois Arcand */ public class RabbitMQConnectionFactory implements AtmosphereConfig.ShutdownHook { private static final Logger logger = LoggerFactory.getLogger(RabbitMQBroadcaster.class); private static RabbitMQConnectionFactory factory; public static final String PARAM_HOST = RabbitMQBroadcaster.class.getName() + ".host"; public static final String PARAM_USER = RabbitMQBroadcaster.class.getName() + ".user"; public static final String PARAM_PASS = RabbitMQBroadcaster.class.getName() + ".password"; public static final String PARAM_EXCHANGE_TYPE = RabbitMQBroadcaster.class.getName() + ".exchange"; public static final String PARAM_VHOST = RabbitMQBroadcaster.class.getName() + ".vhost"; public static final String PARAM_PORT = RabbitMQBroadcaster.class.getName() + ".port"; private String exchangeName; private ConnectionFactory connectionFactory; private Connection connection; private Channel channel; private String exchange; public RabbitMQConnectionFactory(AtmosphereConfig config) { String s = config.getInitParameter(PARAM_EXCHANGE_TYPE); if (s != null) { exchange = s; } else { exchange = "topic"; } String host = config.getInitParameter(PARAM_HOST); if (host == null) { host = "localhost"; } String vhost = config.getInitParameter(PARAM_VHOST); if (vhost == null) { vhost = "/"; } String user = config.getInitParameter(PARAM_USER); if (user == null) { user = "guest"; } String port = config.getInitParameter(PARAM_PORT); if (port == null) { port = "5672"; } String password = config.getInitParameter(PARAM_PASS); if (password == null) { password = "guest"; } exchangeName = "atmosphere." + exchange; try { logger.info("Create Connection Factory"); connectionFactory = new ConnectionFactory(); connectionFactory.setUsername(user); connectionFactory.setPassword(password); connectionFactory.setVirtualHost(vhost); connectionFactory.setHost(host); connectionFactory.setPort(Integer.valueOf(port)); logger.info("Try to acquire a connection ..."); connection = connectionFactory.newConnection(); channel = connection.createChannel(); logger.info("Topic creation '{}'...", exchangeName); channel.exchangeDeclare(exchangeName, exchange); } catch (Exception e) { String msg = "Unable to configure RabbitMQBroadcaster"; logger.error(msg, e); throw new RuntimeException(msg, e); } config.shutdownHook(this); } public final static RabbitMQConnectionFactory getFactory(AtmosphereConfig config) { // No need to synchronize here as the first Broadcaster created is at startup. if (factory == null) { factory = new RabbitMQConnectionFactory(config); } return factory; } public String exchangeName() { return exchangeName; } public Channel channel() { return channel; } @Override public void shutdown() { try { channel.close(); connection.close(); } catch (IOException e) { logger.trace("", e); } } }