我们使用嵌入式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
答案 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地址,因为它应该可以工作。