Uploaded image for project: 'ActiveMQ Classic'
  1. ActiveMQ Classic
  2. AMQ-2771

Side effect from AMQ-2094, server listens on host name address, client connects to localhost with the same URI

    XMLWordPrintableJSON

Details

    • Wish
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 5.3.0, 5.3.1, 5.3.2
    • 5.4.0
    • None
    • None

    Description

      TcpTransport.java contains the following code:

          protected String resolveHostName(String host) throws UnknownHostException {
              String localName = InetAddress.getLocalHost().getHostName();
              if (localName != null && isUseLocalHost()) {
                  if (localName.equals(host)) {
                      return "localhost";
                  }
              }
              return host;
          }
      

      TcpTransportServer.java contains the following code:

              InetAddress addr = InetAddress.getByName(host);
      
              try {
      
                  this.serverSocket = serverSocketFactory.createServerSocket(bind.getPort(), backlog, addr);
      

      /etc/hosts looks like this:

      127.0.0.1       localhost.localdomain   localhost
      someip       myhostname.mydomain myhostname
      

      Now, if I start server with uri: myhostname.mydomain, the server will listen on someip but the client started on the same host with the same uri will try connect to localhost (and fail).

      I know that useLocalHost can be used to avoid it, but silently connecting to localhost is counterintuitive and does not sound like a valid default behaviour (according to documentation, using localhost instead of the host name is a workaround, the workaround is now effectively default behaviour and breaks valid setups that used to work with 5.2).

      This worked fine on 5.2, since the server bound to all interfaces - but fixing this was obviously the right thing to do.

      Questions:
      1. Can the default behaviour be changed to one that would work on majority of systems?
      2. Is the workaround really needed? Maybe it's the local network settings that should be corrected?
      3. The debug messages are misleading and probably should be changed:

      [ActiveMQ Task] [FailoverTransport:604] urlList connectionList:[tcp://hostname:54663?wireFormat.maxInactivityDuration=300000]
      [ActiveMQ Task] [FailoverTransport:723] Attempting connect to: tcp://hostname:54663?wireFormat.maxInactivityDuration=300000
      [ActiveMQ Task] [FailoverTransport:764] Connect fail to: tcp://hostname:54663?wireFormat.maxInactivityDuration=300000, reason: java.net.ConnectException: Connection refused

      In fact, it was the connection to localhost:54663 that was refused.

      Attachments

        1. BrokerServiceResolveHostTest.java
          5 kB
          Dave Lindquist

        Activity

          People

            gtully Gary Tully
            pbruski Przemek Bruski
            Votes:
            1 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: