我们使用嵌入式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发布于 2015-01-22 15:19:01
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地址,因为它应该可以工作。
发布于 2020-11-06 20:25:45
试试这个:
brokerService.addConnector("tcp://0.0.0.0:61610");https://stackoverflow.com/questions/28047617
复制相似问题