Java 其中一个ehcache节点错误地尝试连接到127.0.0.1
你们能帮我理解为什么一个ehcache节点错误地尝试连接到127.0.0.1吗 我正在使用ehcache 2.8.3。我的一个节点正在VMWare下以NAT模式运行。因此,主机具有ipJava 其中一个ehcache节点错误地尝试连接到127.0.0.1,java,rmi,ehcache,Java,Rmi,Ehcache,你们能帮我理解为什么一个ehcache节点错误地尝试连接到127.0.0.1吗 我正在使用ehcache 2.8.3。我的一个节点正在VMWare下以NAT模式运行。因此,主机具有ip192.168.10.1(Windows 7),而VMWare中的主机具有ip192.168.10.128(CentOS 6) 我有以下ehcache配置 如果我在配置文件中的任何地方都没有连接到127.0.0.1,为什么它要尝试连接到127.0.0.1 我可以从192.168.10.1远程登录到192.168
192.168.10.1
(Windows 7),而VMWare中的主机具有ip192.168.10.128
(CentOS 6)
我有以下ehcache配置
如果我在配置文件中的任何地方都没有连接到127.0.0.1,为什么它要尝试连接到127.0.0.1
我可以从192.168.10.1远程登录到192.168.10.128:51000
我还尝试启用引导,并开始看到以下日志消息
2014-07-11 02:35:30.515 +0400 DEBUG cache peers: [RMICachePeer_Stub[UnicastRef2 [liveRef: [endpoint:[127.0.0.1:18405,net.sf.ehcache.distribution.ConfigurableRMIClientSocketFactory@7d0](remote),objID:[-43892557:1472247d06b:-7fff, -5287536613776006259]]]]]
2014-07-11 02:35:30.516 +0400 DEBUG Bootstrapping myCache1 from RMICachePeer_Stub[UnicastRef2 [liveRef: [endpoint:[127.0.0.1:18405,net.sf.ehcache.distribution.ConfigurableRMIClientSocketFactory@7d0](remote),objID:[-43892557:1472247d06b:-7fff, -5287536613776006259]]]]
为什么它认为我有同侪在
127.0.0.1:18405
?在JDK和ehcache源代码中调试了好几个小时后,我发现了这一点
我的核心错误假设是,我看到错误的Windows节点出现了问题。原来是linux节点提供了不正确的地址
官方Ehcache常见问题解答:
这是由2008年对Ubuntu/DebianLinux默认设置的更改引起的
网络配置。本质上,Java调用
InetAddress.getLocalHost();始终返回环回地址,该地址
是127.0.0.1。为什么?因为在最近的发行版中,一个$
主机名始终返回映射到环回设备的地址,
这使得Ehcache的RMI对等创建逻辑始终分配
环回地址,它会导致您看到的错误。你需要的一切
要做的是打开网络配置并确保主机名
返回其他计算机可访问的有效网络地址
网络上的对等点
Linux节点在下面的类java.rmi.registry.LocateRegistry
public static Registry getRegistry(String host, int port, RMIClientSocketFactory csf) throws RemoteException
{
Registry registry = null;
if (port <= 0)
port = Registry.REGISTRY_PORT;
if (host == null || host.length() == 0) {
// If host is blank (as returned by "file:" URL in 1.0.2 used in
// java.rmi.Naming), try to convert to real local host name so
// that the RegistryImpl's checkAccess will not fail.
try {
host = java.net.InetAddress.getLocalHost().getHostAddress();
} catch (Exception e) {
// If that failed, at least try "" (localhost) anyway...
host = "";
}
}
LiveRef liveRef = new LiveRef(new ObjID(ObjID.REGISTRY_ID), new TCPEndpoint(host, port, csf, null), false);
RemoteRef ref = (csf == null) ? new UnicastRef(liveRef) : new UnicastRef2(liveRef);
return (Registry) Util.createProxy(RegistryImpl.class, ref, false);
}
Terracotta的官方建议是修改hosts
文件,这对我来说太残酷了。我的结论是,Ops团队只需在我的服务器的命令行中提供正确的绑定地址就更容易了,如下所示
java -Djava.rmi.server.hostname=192.168.10.128 -jar services.jar
在JDK和ehcache源代码中调试了好几个小时后,我终于明白了这一点 我的核心错误假设是,我看到错误的Windows节点出现了问题。原来是linux节点提供了不正确的地址 官方Ehcache常见问题解答: 这是由2008年对Ubuntu/DebianLinux默认设置的更改引起的 网络配置。本质上,Java调用 InetAddress.getLocalHost();始终返回环回地址,该地址 是127.0.0.1。为什么?因为在最近的发行版中,一个$ 主机名始终返回映射到环回设备的地址, 这使得Ehcache的RMI对等创建逻辑始终分配 环回地址,它会导致您看到的错误。你需要的一切 要做的是打开网络配置并确保主机名 返回其他计算机可访问的有效网络地址 网络上的对等点 Linux节点在下面的类
java.rmi.registry.LocateRegistry
public static Registry getRegistry(String host, int port, RMIClientSocketFactory csf) throws RemoteException
{
Registry registry = null;
if (port <= 0)
port = Registry.REGISTRY_PORT;
if (host == null || host.length() == 0) {
// If host is blank (as returned by "file:" URL in 1.0.2 used in
// java.rmi.Naming), try to convert to real local host name so
// that the RegistryImpl's checkAccess will not fail.
try {
host = java.net.InetAddress.getLocalHost().getHostAddress();
} catch (Exception e) {
// If that failed, at least try "" (localhost) anyway...
host = "";
}
}
LiveRef liveRef = new LiveRef(new ObjID(ObjID.REGISTRY_ID), new TCPEndpoint(host, port, csf, null), false);
RemoteRef ref = (csf == null) ? new UnicastRef(liveRef) : new UnicastRef2(liveRef);
return (Registry) Util.createProxy(RegistryImpl.class, ref, false);
}
Terracotta的官方建议是修改hosts
文件,这对我来说太残酷了。我的结论是,Ops团队只需在我的服务器的命令行中提供正确的绑定地址就更容易了,如下所示
java -Djava.rmi.server.hostname=192.168.10.128 -jar services.jar
我会修复主机文件。将真实主机名映射到127.0.0.1完全是错误的。我认为这是暂时的异常。我的hosts文件如下所示-127.0.0.1 localhost.localdomain localhost 10.135.14.34 myhost.mydomain.com myhost。10.135.14.34的ip地址是有效的,但我仍然得到了错误-有什么想法吗?我得到了这个行为,它试图连接的地址是一个公共地址!修改hosts文件似乎是正确的,但您不可能知道服务器解析主机名的内容和方式。我只是猜测我的域名在路上的某个地方,它解析为该域名(我们的网站)的公共IP地址,甚至不是广域网连接的公共IP。我会修复主机文件。将真实主机名映射到127.0.0.1完全是错误的。我认为这是暂时的异常。我的hosts文件如下所示-127.0.0.1 localhost.localdomain localhost 10.135.14.34 myhost.mydomain.com myhost。10.135.14.34的ip地址是有效的,但我仍然得到了错误-有什么想法吗?我得到了这个行为,它试图连接的地址是一个公共地址!修改hosts文件似乎是正确的,但您不可能知道服务器解析主机名的内容和方式。我只是猜测我的域名在路上的某个地方,它解析为该域名(我们的网站)的公共IP地址,而不是广域网连接的公共IP。
java -Djava.rmi.server.hostname=192.168.10.128 -jar services.jar