public void onMessage(Message m) { _logger.info("Failover exchange notified cluster membership change"); String currentBrokerIP = ""; try { currentBrokerIP = InetAddress.getByName(_currentBrokerDetail.getHost()).getHostAddress(); } catch (Exception e) { _logger.warn("Unable to resolve current broker host name", e); } List<BrokerDetails> brokerList = new ArrayList<BrokerDetails>(); try { List<String> list = (List<String>) m.getObjectProperty("amq.failover"); for (String brokerEntry : list) { String[] urls = brokerEntry.substring(5).split(","); // Iterate until you find the correct transport // Need to reconsider the logic when the C++ broker supports // SSL URLs. for (String url : urls) { String[] tokens = url.split(":"); if (tokens[0].equalsIgnoreCase(_originalBrokerDetail.getTransport())) { BrokerDetails broker = new AMQBrokerDetails(); broker.setTransport(tokens[0]); broker.setHost(tokens[1]); broker.setPort(Integer.parseInt(tokens[2])); broker.setProperties(_originalBrokerDetail.getProperties()); broker.setSSLConfiguration(_originalBrokerDetail.getSSLConfiguration()); brokerList.add(broker); if (currentBrokerIP.equals(broker.getHost()) && _currentBrokerDetail.getPort() == broker.getPort()) { _currentBrokerIndex = brokerList.indexOf(broker); } break; } } } } catch (JMSException e) { _logger.error("Error parsing the message sent by failover exchange", e); } synchronized (_brokerListLock) { _connectionDetails.setBrokerDetails(brokerList); } _logger.info("============================================================"); _logger.info("Updated cluster membership details " + _connectionDetails); _logger.info("============================================================"); }