diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyConnection.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyConnection.java index f6fe2676de..e9e64a2cc7 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyConnection.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyConnection.java @@ -298,6 +298,14 @@ public class NettyConnection implements Connection { return address.toString(); } + public String getLocalAddress() { + SocketAddress address = channel.localAddress(); + if (address == null) { + return null; + } + return "tcp://" + address.toString(); + } + public boolean isDirectDeliver() { return directDeliver; } diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/spi/core/remoting/Connection.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/spi/core/remoting/Connection.java index 76e5a3d7df..ac05267a16 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/spi/core/remoting/Connection.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/spi/core/remoting/Connection.java @@ -90,6 +90,15 @@ public interface Connection { */ String getRemoteAddress(); + /** + * Returns a string representation of the local address this connection is connected to. + * This is useful when the server is configured at 0.0.0.0 (or multiple IPs). + * This will give you the actual IP that's being used. + * + * @return the local address + */ + String getLocalAddress(); + /** * Called periodically to flush any data in the batch buffer */ diff --git a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConnection.java b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConnection.java index 3cddb2959f..abe7cdff79 100644 --- a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConnection.java +++ b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConnection.java @@ -191,6 +191,10 @@ public class OpenWireConnection implements RemotingConnection, CommandVisitor { this.creationTime = System.currentTimeMillis(); } + public String getLocalAddress() { + return transportConnection.getLocalAddress(); + } + @Override public void bufferReceived(Object connectionID, ActiveMQBuffer buffer) { try { diff --git a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireProtocolManager.java b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireProtocolManager.java index 5489fdf0ed..fa75fcfc33 100644 --- a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireProtocolManager.java +++ b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireProtocolManager.java @@ -46,7 +46,6 @@ import org.apache.activemq.artemis.core.protocol.openwire.amq.AMQPersistenceAdap import org.apache.activemq.artemis.core.protocol.openwire.amq.AMQProducerBrokerExchange; import org.apache.activemq.artemis.core.protocol.openwire.amq.AMQServerSession; import org.apache.activemq.artemis.core.protocol.openwire.amq.AMQSession; -import org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptor; import org.apache.activemq.artemis.core.remoting.impl.netty.NettyServerConnection; import org.apache.activemq.artemis.core.security.CheckType; import org.apache.activemq.artemis.core.server.ActiveMQServer; @@ -137,7 +136,6 @@ public class OpenWireProtocolManager implements ProtocolManager, No private final ScheduledExecutorService scheduledPool; - private BrokerInfo brokerInfo = new BrokerInfo(); public OpenWireProtocolManager(OpenWireProtocolManagerFactory factory, ActiveMQServer server) { this.factory = factory; @@ -152,11 +150,6 @@ public class OpenWireProtocolManager implements ProtocolManager, No if (service != null) { service.addNotificationListener(this); } - brokerInfo.setBrokerName(server.getIdentity()); - brokerInfo.setBrokerId(new BrokerId(server.getNodeID().toString())); - brokerInfo.setPeerBrokerInfos(null); - brokerInfo.setFaultTolerantConfiguration(false); - brokerInfo.setBrokerURL(null); } @@ -172,10 +165,6 @@ public class OpenWireProtocolManager implements ProtocolManager, No @Override public ConnectionEntry createConnectionEntry(Acceptor acceptorUsed, Connection connection) { - if (brokerInfo.getBrokerURL() == null) { - NettyAcceptor nettyAcceptor = (NettyAcceptor)acceptorUsed; - brokerInfo.setBrokerURL(nettyAcceptor.getURL()); - } OpenWireFormat wf = (OpenWireFormat) wireFactory.createWireFormat(); OpenWireConnection owConn = new OpenWireConnection(acceptorUsed, connection, this, wf); owConn.init(); @@ -709,9 +698,15 @@ public class OpenWireProtocolManager implements ProtocolManager, No } public void sendBrokerInfo(OpenWireConnection connection) { - BrokerInfo copy = brokerInfo.copy(); + BrokerInfo brokerInfo = new BrokerInfo(); + brokerInfo.setBrokerName(server.getIdentity()); + brokerInfo.setBrokerId(new BrokerId(server.getNodeID().toString())); + brokerInfo.setPeerBrokerInfos(null); + brokerInfo.setFaultTolerantConfiguration(false); + brokerInfo.setBrokerURL(connection.getLocalAddress()); + //cluster support yet to support - copy.setPeerBrokerInfos(null); - connection.dispatchAsync(copy); + brokerInfo.setPeerBrokerInfos(null); + connection.dispatchAsync(brokerInfo); } } diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/invm/InVMConnection.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/invm/InVMConnection.java index 0205141ca7..59c319aca4 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/invm/InVMConnection.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/invm/InVMConnection.java @@ -208,6 +208,10 @@ public class InVMConnection implements Connection { return "invm:" + serverID; } + public String getLocalAddress() { + return "invm:" + serverID; + } + public int getBatchingBufferSize() { return -1; } diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyAcceptor.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyAcceptor.java index a53b8868e6..c9bc16aba9 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyAcceptor.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyAcceptor.java @@ -580,9 +580,6 @@ public class NettyAcceptor implements Acceptor { return sb.toString(); } - public String getURL() { - return "tcp://" + this.host + ":" + this.port; - } // Inner classes ----------------------------------------------------------------------------- private final class ActiveMQServerChannelHandler extends ActiveMQChannelHandler implements ConnectionCreator {