ActiveMQ嵌入式代理强制侦听ip而不是hostname

时间:2015-01-20 14:19:39

标签: activemq

我们使用嵌入式ActiveMQ代理并像这样创建它(稍微简化):

BrokerService brokerService = new BrokerService();
brokerService.addConnector("tcp://1.2.3.4:61610");
brokerService.start();

我们遇到的问题是代理正在侦听主机名而不是IP地址,这在我们的案例中不起作用。如何强制brokerService侦听IP地址而不是主机名。

以下是启动经纪人时日志所说的内容:

2015-01-20 15:16:03,414 qtp833534789-27 INFO  BrokerService - Apache ActiveMQ 5.10.0 (b1653842572, ID:ABC123-59162-1421763362756-0:1) is starting

2015-01-20 15:16:04,948 qtp833534789-27 INFO  TransportServerThreadSupport - Listening for connections at: tcp://myhostname.mydomain.local:61610

2015-01-20 15:16:04,948 qtp833534789-27 INFO  TransportConnector - Connector tcp://myhostname.mydomain.local:61610 started

1 个答案:

答案 0 :(得分:1)

TCP侦听器永远不能侦听DNS名称。它始终绑定到一个或多个接口/ IP地址。

在这种情况下,ActiveMQ通过反向解析IP中的DNS名称来帮助您,因为当您读取逻辑DNS名称而不是某个数字时,更容易理解日志中发生的情况。

ActiveMQ有一些像这样的代码

protected String resolveHostName(ServerSocket socket, InetAddress bindAddress) throws UnknownHostException {
    String result = null;
    if (socket.isBound()) {
        if (socket.getInetAddress().isAnyLocalAddress()) {
            // make it more human readable and useful, an alternative to 0.0.0.0
            result = InetAddressUtil.getLocalHostName();
        } else {
            result = socket.getInetAddress().getCanonicalHostName();
        }
    } else {
        result = bindAddress.getCanonicalHostName();
    }
    return result;
}

一旦套接字确实绑定,用DNS替换IP。我猜你甚至没有尝试使用IP地址,因为它应该可以工作。