Open mma-pivotal opened 2 years ago
Issue Description
When a developer uses service broker to attach a multi-node RMQ cluster to his application, cfenv will only parse the 1st node and ignore the others.
Here is an example of what the ENV variables looks like for a multi-node RMQ cluster.
"p.rabbitmq": [{ xxx "credentials": { xxx "hostname": "q-i0.rabbitmq-server.bosh.rabbitmq.bosh", "hostnames": [ "q-i0.rabbitmq-server.bosh.rabbitmq.bosh", "q-i1.rabbitmq-server.bosh.rabbitmq.bosh", "q-i2.rabbitmq-server.bosh.rabbitmq.bosh" ], }
Note that both hostname and hostnames are listed and hostnames contains the hostname for all 3 nodes.
hostname
hostnames
From the official service broker documentation, both hostname and hostnames are top-level properties for AMQP connection.
The top level properties uri, uris, vhost, username, password, hostname, and hostnames provide access to the AMQP 0.9.1 protocol.
However, AmqpCfEnvProcessor calls cfCredentials.getHost() which only parse host and hostname from ENV.
host
This leads to application totally ignoring the other nodes in RMQ cluster.
An example of ENV parsed by AmqpCfEnvProcessor can be found below.
"name": "AmqpCfEnvProcessor", "properties": { "spring.rabbitmq.host": { "value": "q-i0.rabbitmq-server.bosh.rabbitmq.bosh" }, "spring.rabbitmq.password": { "value": "******" }, "spring.rabbitmq.username": { "value": "09db23ac-0c02-46a9-8959-20729bcf1770" }, "spring.rabbitmq.ssl.enabled": { "value": "true" }, "spring.rabbitmq.port": { "value": "5671" }, "spring.rabbitmq.virtualHost": { "value": "b7124f11-7685-4873-a3e4-24ac9ed3cdba" } }
As you can see, there is only 1 host.
Expected behavior AmqpCfEnvProcessor able to parse all nodes from the hostnames ENV variable.
AmqpCfEnvProcessor
Issue Description
When a developer uses service broker to attach a multi-node RMQ cluster to his application, cfenv will only parse the 1st node and ignore the others.
Here is an example of what the ENV variables looks like for a multi-node RMQ cluster.
Note that both
hostname
andhostnames
are listed andhostnames
contains the hostname for all 3 nodes.From the official service broker documentation, both
hostname
andhostnames
are top-level properties for AMQP connection.However, AmqpCfEnvProcessor calls cfCredentials.getHost() which only parse
host
andhostname
from ENV.This leads to application totally ignoring the other nodes in RMQ cluster.
An example of ENV parsed by AmqpCfEnvProcessor can be found below.
As you can see, there is only 1 host.
Expected behavior
AmqpCfEnvProcessor
able to parse all nodes from thehostnames
ENV variable.