static RabbitConnectionFactoryConfig uriToConnectionConfig(String uri) { RabbitConnectionFactoryConfig properties = new RabbitConnectionFactoryConfig(); if (isNotEmpty(uri)) { String username = StringUtils.substringBetween(uri, "amqp://", ":"); String password = StringUtils.substringBetween(uri, username + ":", "@"); String hostWithPort = StringUtils.substringBetween(uri, "@", "/"); // If no virtual host is specified if (isEmpty(hostWithPort)) { hostWithPort = StringUtils.substringAfter(uri, "@"); } int port = properties.getPort(); String host = hostWithPort; boolean hasPort = StringUtils.contains(hostWithPort, ":"); if (hasPort) { host = StringUtils.substringBefore(hostWithPort, ":"); port = NumberUtils.toInt(StringUtils.substringAfter(hostWithPort, ":")); } String virtualHost = StringUtils.substringAfter(uri, hostWithPort + "/"); properties.setUsername(username); properties.setPassword(password); properties.setHost(host); properties.setPort(port); if (isNotEmpty(virtualHost)) { properties.setVirtualHost(virtualHost); } } return properties; }
@Bean public CachingConnectionFactory rabbitConnectionFactory() { log.info("AMQP URL: {}", isBlank(amqpConnectionUri) ? "localhost:5672" : amqpConnectionUri); RabbitConnectionFactoryConfig config = uriToConnectionConfig(amqpConnectionUri); CachingConnectionFactory connectionFactory = new CachingConnectionFactory(config.getHost()); connectionFactory.setPort(config.getPort()); if (config.getUsername() != null) { connectionFactory.setUsername(config.getUsername()); } if (config.getPassword() != null) { connectionFactory.setPassword(config.getPassword()); } if (config.getVirtualHost() != null) { connectionFactory.setVirtualHost(StringUtils.remove(config.getVirtualHost(), '/')); } return connectionFactory; }