java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is: java.net.ConnectException: Connection refused
最近在做ehcache的分布式(RMI)缓存的时候发现这个异常,折腾了好一会儿
看官方解释:
写道
Essentially, this java call: InetAddress.getLocalHost();always returns the loopback address, which is 127.0.0.1. Why? Because in these recent distros, a system call of $ hostname always returns an address mapped onto the loopback device. Which causes ehcache’s RMI Peer creation logic to always assign the loopback address, which causes the error you are seeing.
All you need to do is crack open the network config and make sure that the hostname of the machine returns a valid network address accessible by other peers on the network.
All you need to do is crack open the network config and make sure that the hostname of the machine returns a valid network address accessible by other peers on the network.
大概意思是hostname对应的ip地址是要能被远程调用者能访问,一般情况下在hosts里面加上
写道
hostName IP#能被远程调用的IP,比如调用者在局域网,则应该是本机的局域网IP
其实不难理解
如果你返回的rmi对象包含的是127.0.0.1,调用者根据这个地址调用时会调用到本机....而本机没有这个rmi服务,所以出现上述异常.
相关推荐
Spring通过提供RMI集成,简化了RMI服务的创建和调用。以下是一些关键点: 1. **服务接口定义**:首先,你需要定义一个远程服务接口,这个接口将包含你希望在远程进程中执行的方法。 2. **服务实现**:接着,创建该...
- **异常处理**:RMI调用可能会抛出`RemoteException`和其他网络相关的异常,需要适当地捕获和处理。 - **安全性**:RMI调用涉及网络通信,因此要考虑安全问题,如使用SSL加密,限制访问权限等。 - **性能优化**:...
当客户端执行RMI调用时,它实际上是调用了Stub对象的方法。Stub会将参数序列化并封装成网络消息,通过网络发送给服务器。服务器的Skeleton接收到消息后,反序列化参数并调用对应的远程实现方法。处理完成后,返回值...
这些方法的实际实现位于服务器端,而客户端通过RMI调用这些方法,就像调用本地方法一样。 创建RMI服务涉及以下步骤: 1. **定义远程接口**:定义一个继承自`java.rmi.Remote`的接口,如`BankService`,并声明可能...
6. **处理异常**:RMI可能会抛出多种异常,如RemoteException、NotBoundException等,需要在客户端和服务器端适当地捕获和处理这些异常。 RMI提供了高效的性能和良好的可扩展性,但它也有一些限制,例如只支持Java...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间透明地调用对象的方法。在RMI架构中,客户端能够像调用本地对象一样调用远程服务器上的对象...
接口中的方法声明抛出java.rmi.RemoteException,这是所有RMI特定异常的超类。 2. **远程实现(Remote Implementation)**:实现了远程接口的具体类,包含了远程方法的实现。这个类需要被Java的序列化机制支持,...
这些接口需要继承`java.rmi.Remote`接口,并声明可能抛出`RemoteException`的异常。例如,上述示例中的`LoadFile`接口。 ```java public interface LoadFile extends Remote { void upLoadFile(FileInformation ...
6. **序列化(Serialization)**:RMI依赖于Java的序列化机制来传输对象和方法调用。所有需要在网络间传递的对象都必须实现Serializable接口。 在Java RMI的Demo中,通常会包含以下步骤: 1. **创建远程接口**:...
注意,RMI的安全性、异常处理和网络通信细节也是开发者需要考虑的问题。例如,需要处理可能的`RemoteException`,以及配置JVM的安全策略文件以允许跨JVM的通信。 总的来说,Java RMI提供了一种简单而强大的方式来...
7. **处理异常**:由于网络通信的不确定性,RMI调用可能会抛出`java.rmi.RemoteException`和其他相关异常,需要在客户端捕获并处理。 在代码编写方面,服务端的代码通常会包含以下部分: - 创建并导出远程对象实例...
客户端将通过RMI调用服务器端的方法,并打印返回的结果。 这个简单的例子展示了RMI的基本使用方式。实际应用中,可能会涉及到更复杂的网络交互、多线程、安全性控制等话题。理解RMI的工作原理和实践,对于开发...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种用于分布式计算的技术,它允许一个Java对象调用另一个在不同JVM上的对象的方法。这个简单的例子将引导我们了解如何利用Java RMI实现远程...
- **网络依赖**:如果网络中断,RMI调用会失败,这对高可用性的应用来说是一个挑战。 总的来说,RMI是Java分布式系统中的一个强大工具,它简化了网络通信,并为开发人员提供了一种直观的方式来构建分布式应用。通过...
Java Remote Method Invocation (RMI) 是Java平台提供的一种用于创建分布式应用程序的技术,它允许对象在不同的JVM(Java虚拟机)之间通过网络进行方法调用。RMI的主要优点是其透明性,即开发者可以像调用本地方法...
3. **性能优化**:频繁的RMI调用可能会增加网络负担,考虑批量处理或缓存结果以减少通信次数。 4. **版本兼容性**:当服务器或客户端更新时,必须保证远程接口的兼容性,否则会导致调用失败。 5. **测试与调试**:...
**RMI(Remote Method Invocation)远程方法调用**是Java平台提供的一种分布式计算技术,它允许Java对象在不同的Java虚拟机之间进行通信,仿佛这些对象都在同一台机器上。RMI是Java EE的重要组成部分,主要用于构建...
8. **异常处理**:由于网络通信的不确定性,Java RMI调用可能会抛出各种异常,如 java.rmi.ConnectException(连接失败)、NotBoundException(未找到绑定的对象)和RemoteException(远程通信异常)等。因此,良好...
1. **定义远程接口**:首先,需要定义一个远程接口,该接口继承自`java.rmi.Remote`,并且所有方法都应声明抛出`RemoteException`异常,以应对网络不可靠的情况。 2. **实现远程接口**:在服务器端,实现远程接口,...
- **异常处理**:RMI调用可能遇到网络中断、远程对象不存在等问题,因此客户端需要适当地捕获和处理`java.rmi`包下的异常,如`RemoteException`。 3. **RMI通信机制**: - **marshalling**与**unmarshalling**:...