/* * Copyright 2011-2016 the original author or authors. * * 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. * */ package org.springframework.xd.dirt.integration.rabbit; import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.connection.RabbitConnectionFactoryBean; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.amqp.RabbitProperties; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.util.StringUtils; /** * Configures the connection factory used by the rabbit message bus. * * @author Eric Bottard * @author Gary Russell * @author David Turanski */ @Configuration public class ConnectionFactorySettings { @Value("${spring.rabbitmq.useSSL:false}") private boolean useSSL; @Value("${spring.rabbitmq.sslProperties:}") private Resource sslPropertiesLocation; @Value("${spring.rabbitmq.ssl.keyStore:}") private String keyStore; @Value("${spring.rabbitmq.ssl.keyStorePassphrase:}") private String keyStorePassphrase; @Value("${spring.rabbitmq.ssl.trustStore:}") private String trustStore; @Value("${spring.rabbitmq.ssl.trustStorePassphrase:}") private String trustStorePassphrase; @Value("${spring.rabbitmq.channelCacheSize:100}") private Integer channelCacheSize; @Bean // TODO: Move to spring boot public ConnectionFactory rabbitConnectionFactory(RabbitProperties config, com.rabbitmq.client.ConnectionFactory rabbitConnectionFactory) throws Exception { CachingConnectionFactory factory = new CachingConnectionFactory(rabbitConnectionFactory); factory.setAddresses(config.getAddresses()); if (config.getHost() != null) { factory.setHost(config.getHost()); factory.setPort(config.getPort()); } if (config.getUsername() != null) { factory.setUsername(config.getUsername()); } if (config.getPassword() != null) { factory.setPassword(config.getPassword()); } if (config.getVirtualHost() != null) { factory.setVirtualHost(config.getVirtualHost()); } if (this.channelCacheSize != null) { factory.setChannelCacheSize(this.channelCacheSize); } return factory; } // If no RabbitProperties bean is available, instantiate one, deferring to Spring Boot for populating it @Configuration @ConditionalOnMissingBean(RabbitProperties.class) @EnableConfigurationProperties(RabbitProperties.class) public static class RabbitPropertiesLoader { } @Bean public RabbitConnectionFactoryBean rabbitFactory() { RabbitConnectionFactoryBean rabbitConnectionFactoryBean = new RabbitConnectionFactoryBean(); rabbitConnectionFactoryBean.setUseSSL(this.useSSL); rabbitConnectionFactoryBean.setSslPropertiesLocation(this.sslPropertiesLocation); rabbitConnectionFactoryBean.setKeyStore(StringUtils.hasText(this.keyStore) ? this.keyStore : null); rabbitConnectionFactoryBean.setKeyStorePassphrase(StringUtils.hasText( this.keyStorePassphrase) ? this.keyStorePassphrase : null); rabbitConnectionFactoryBean.setTrustStore(StringUtils.hasText(this.trustStore) ? this.trustStore : null); rabbitConnectionFactoryBean.setTrustStorePassphrase(StringUtils.hasText( this.trustStorePassphrase) ? this.trustStorePassphrase : null); return rabbitConnectionFactoryBean; } }