You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Daniel Mack (JIRA)" <ji...@apache.org> on 2017/04/11 06:39:42 UTC

[jira] [Commented] (AMQ-5516) Misbehaving name resolution in org.apache.activemq.transport.tcp.TcpTransportServer

    [ https://issues.apache.org/jira/browse/AMQ-5516?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15963899#comment-15963899 ] 

Daniel Mack commented on AMQ-5516:
----------------------------------

confirmed for AMQ 5.14.3

possible workaround:

{code}
private DiscoveryAgent agent;
private TransportConnector transportConnector;

//(..)

private final void initialize() {
   //(...)
   if (null != agent) {
     agent.stop();
   }
   agent = MulticastDiscoveryAgentFactory.createDiscoveryAgent(discoveryURI);
   agent.registerService("YOUR_NUMERIC_TRANSPORT_CONNECTOR_ADDRESS_HERE");
   transportConnector.setDiscoveryAgent(agent);
   //(...)
}

public final void start() {
   //(...) !!! IMPORTANT, START YOUR BROKER / BROKERSERVICE HERE !!!
   agent.stop();
   agent.registerService(transportConnector.getUri().toString());
   agent.start();
}
{code}

> Misbehaving name resolution in org.apache.activemq.transport.tcp.TcpTransportServer
> -----------------------------------------------------------------------------------
>
>                 Key: AMQ-5516
>                 URL: https://issues.apache.org/jira/browse/AMQ-5516
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Connector
>    Affects Versions: 5.10.0
>         Environment: AMQ  : 5.10.0
> java : Oracle 1.7.0_72-b14
> OS   : debian 7.4
>            Reporter: ulrich
>            Priority: Minor
>
> Hi,
> Here is the fragement of our spring config which declares the connectors:
> <amq:networkConnectors>
> 	<amq:networkConnector name="brokerName" uri="multicast://default" />
> </amq:networkConnectors>
> <amq:transportConnector name="openwire" uri="tcp://10.1.1.5:61616" discoveryUri="multicast://default">
> 	<amq:publishedAddressPolicy>
> 		<amq:publishedAddressPolicy publishedHostStrategy="IPADDRESS" />
> 	</amq:publishedAddressPolicy>
> </amq:transportConnector>
>  
> We have a configuration where several IP addresses are given to the machine in /etc/hosts. There is no dns resolving mybox.
> The relevant part is this one:
> 127.0.0.1 mybox localhost
> 10.1.1.5  mybox
> 172.16.2.5  mybox
> #...others...
> In org.apache.activemq.transport.tcp.TcpTransportServer:138, the method bind() calls resolveHostName(serverSocket, addr) to rewrite the URI (why??).
> The URI tcp://10.1.1.5:61616 is rewritten tcp://mybox:61616.
> We can't advertise tcp://mybox:61616 since there is no name resolution. This is why the publishedAddressPolicy is set to IPADDRESS. 
> The multicast agent rewrites the URI again but the name resolution found for mybox is 127.0.0.1. The advertised URI is now tcp://127.0.0.1:61616. Each broker tries to connect to themselves.
> Depending on the order of the lines in /etc/hosts to resolve to the correct ip is about random chance.
> Is this call to resolveHostName(serverSocket, addr) really necessary? Why trying to outsmart the configuration?



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)