首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveMQ embedded broker强制侦听ip而不是主机名

ActiveMQ embedded broker强制侦听ip而不是主机名
EN

Stack Overflow用户
提问于 2015-01-20 22:19:39
回答 2查看 896关注 0票数 0

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

代码语言:javascript
复制
BrokerService brokerService = new BrokerService();
brokerService.addConnector("tcp://1.2.3.4:61610");
brokerService.start();

我们遇到的问题是,代理监听的是主机名而不是IP地址,这在我们的情况下不起作用。如何强制brokerService监听IP地址而不是主机名。

以下是启动代理时日志显示的内容:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2015-01-22 15:19:01

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

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

ActiveMQ有一些这样的代码

代码语言:javascript
复制
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地址,因为它应该可以工作。

票数 1
EN

Stack Overflow用户

发布于 2020-11-06 20:25:45

试试这个:

代码语言:javascript
复制
brokerService.addConnector("tcp://0.0.0.0:61610");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28047617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档