Support for setting credentials and vhost in rabbit addresses
User can now add credentials, vhost and protocol prefix (amqp://) to any or all of the addresses, extending the format beyond that accepted bu the rabbitmq client, but making it cloud friendly. Only one of the addresses needs those properties and all are optional. Port also defaults to 5672 in an address.
This commit is contained in:
		
							parent
							
								
									148e32d09a
								
							
						
					
					
						commit
						aa38d33404
					
				| 
						 | 
				
			
			@ -70,13 +70,46 @@ public class RabbitProperties {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	public void setAddresses(String addresses) {
 | 
			
		||||
		this.addresses = addresses;
 | 
			
		||||
		this.addresses = parseAddresses(addresses);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public String getAddresses() {
 | 
			
		||||
		return (this.addresses == null ? this.host + ":" + this.port : this.addresses);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private String parseAddresses(String addresses) {
 | 
			
		||||
		StringBuilder result = new StringBuilder();
 | 
			
		||||
		for (String address : StringUtils.commaDelimitedListToSet(addresses)) {
 | 
			
		||||
			address = address.trim();
 | 
			
		||||
			if (address.startsWith("amqp://")) {
 | 
			
		||||
				address = address.substring("amqp://".length());
 | 
			
		||||
			}
 | 
			
		||||
			if (address.contains("@")) {
 | 
			
		||||
				String[] split = StringUtils.split(address, "@");
 | 
			
		||||
				String creds = split[0];
 | 
			
		||||
				address = split[1];
 | 
			
		||||
				split = StringUtils.split(creds, ":");
 | 
			
		||||
				this.username = split[0];
 | 
			
		||||
				if (split.length > 0) {
 | 
			
		||||
					this.password = split[1];
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			int index = address.indexOf("/");
 | 
			
		||||
			if (index >= 0 && index < address.length()) {
 | 
			
		||||
				this.virtualHost = address.substring(index + 1);
 | 
			
		||||
				address = address.substring(0, index);
 | 
			
		||||
			}
 | 
			
		||||
			if (result.length() > 0) {
 | 
			
		||||
				result.append(",");
 | 
			
		||||
			}
 | 
			
		||||
			if (!address.contains(":")) {
 | 
			
		||||
				address = address + ":" + this.port;
 | 
			
		||||
			}
 | 
			
		||||
			result.append(address);
 | 
			
		||||
		}
 | 
			
		||||
		return result.length() > 0 ? result.toString() : null;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setPort(int port) {
 | 
			
		||||
		this.port = port;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,6 +50,34 @@ public class RabbitPropertiesTests {
 | 
			
		|||
		assertEquals(9999, this.properties.getPort());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void addressesDoubleValuedWithCredentials() {
 | 
			
		||||
		this.properties.setAddresses("myhost:9999,root:password@otherhost:1111/host");
 | 
			
		||||
		assertNull(this.properties.getHost());
 | 
			
		||||
		assertEquals(9999, this.properties.getPort());
 | 
			
		||||
		assertEquals("root", this.properties.getUsername());
 | 
			
		||||
		assertEquals("host", this.properties.getVirtualHost());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void addressesSingleValuedWithCredentials() {
 | 
			
		||||
		this.properties.setAddresses("amqp://root:password@otherhost:1111/host");
 | 
			
		||||
		assertEquals("otherhost", this.properties.getHost());
 | 
			
		||||
		assertEquals(1111, this.properties.getPort());
 | 
			
		||||
		assertEquals("root", this.properties.getUsername());
 | 
			
		||||
		assertEquals("host", this.properties.getVirtualHost());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void addressesSingleValuedWithCredentialsDefaultPort() {
 | 
			
		||||
		this.properties.setAddresses("amqp://root:password@lemur.cloudamqp.com/host");
 | 
			
		||||
		assertEquals("lemur.cloudamqp.com", this.properties.getHost());
 | 
			
		||||
		assertEquals(5672, this.properties.getPort());
 | 
			
		||||
		assertEquals("root", this.properties.getUsername());
 | 
			
		||||
		assertEquals("host", this.properties.getVirtualHost());
 | 
			
		||||
		assertEquals("lemur.cloudamqp.com:5672", this.properties.getAddresses());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void testDefaultVirtualHost() {
 | 
			
		||||
		this.properties.setVirtualHost("/");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue