package io.muoncore.transport.amqp;
import io.muoncore.config.AutoConfiguration;
import io.muoncore.extension.amqp.*;
import io.muoncore.extension.amqp.rabbitmq09.RabbitMq09ClientAmqpConnection;
import io.muoncore.extension.amqp.rabbitmq09.RabbitMq09QueueListenerFactory;
import io.muoncore.transport.MuonTransport;
import io.muoncore.transport.MuonTransportFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Properties;
public class AmqpMuonTransportFactory implements MuonTransportFactory {
public static final String TRANSPORT_URL_PROPERTY_NAME = "amqp.transport.url";
private static Logger LOG = LoggerFactory.getLogger(AmqpMuonTransportFactory.class.getName());
private AutoConfiguration autoConfiguration;
@Override
public MuonTransport build(Properties properties) {
MuonTransport muonTransport = null;
try {
String amqpUrl = properties.getProperty(TRANSPORT_URL_PROPERTY_NAME);
if (amqpUrl == null || amqpUrl.trim().length() == 0) {
amqpUrl = "amqp://localhost";
LOG.warn(TRANSPORT_URL_PROPERTY_NAME + " is not set, defaulting to 'amqp://localhost' for AMQP transport connection");
}
String serviceName = autoConfiguration.getServiceName();
AmqpConnection connection = new RabbitMq09ClientAmqpConnection(amqpUrl);
QueueListenerFactory queueFactory = new RabbitMq09QueueListenerFactory(connection.getChannel());
ServiceQueue serviceQueue = new DefaultServiceQueue(serviceName, connection);
AmqpChannelFactory channelFactory = new DefaultAmqpChannelFactory(serviceName, queueFactory, connection);
muonTransport = new AMQPMuonTransport(amqpUrl, serviceQueue, channelFactory);
} catch (Exception e) {
LOG.warn("Error creating AMQP muon transport", e);
}
return muonTransport;
}
@Override
public void setAutoConfiguration(AutoConfiguration autoConfiguration) {
this.autoConfiguration = autoConfiguration;
}
}