服务器有两个网卡,一个内网,一个外网
Spring xml配置如下:
<context:property-placeholder location="classpath:/config/app.properties" /> <!-- 客户端RMI服务 --> <bean id="appPush" class="cn.com.sinosoft.ebusiness.messagePush.service.server.support.RMIServiceImpl"/> <bean id="appPushMsg2Client" class="org.springframework.remoting.rmi.RmiServiceExporter"> <property name="service" ref="appPush" /> <!-- 定义服务名 --> <property name="serviceName" value="appPushMsg2Client" /> <property name="serviceInterface" value="cn.com.sinosoft.ebusiness.messagePush.service.server.RMIService" /> <property name="registryPort" value="${ServicePort}" /> <property name="registryHost" value="${ServiceRegistryIp}" /> </bean>
在app.properties强制spring发布rmi服务注册IP为内网的IP(10.120.20.197),结果发布的时候出现下面异常:
2014-04-11 16:50:05 INFO ClassPathXmlApplicationContext:456 Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@6aaea944: startup date [Fri Apr 11 16:50:05 CST 2014]; root of context hierarchy 2014-04-11 16:50:05 INFO XmlBeanDefinitionReader:315 Loading XML bean definitions from class path resource [config/spring/applicationContext-messagePush.xml] 2014-04-11 16:50:06 INFO PropertyPlaceholderConfigurer:177 Loading properties file from class path resource [config/app.properties] 2014-04-11 16:50:06 INFO DefaultListableBeanFactory:555 Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@44b89233: defining beans [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,org.springframework.aop.config.internalAutoProxyCreator,appPush,appPushMsg2Client]; root of factory hierarchy 2014-04-11 16:50:06 INFO RmiServiceExporter:328 Looking for RMI registry at port '1099' of host [10.120.20.197] 2014-04-11 16:50:07 INFO DefaultListableBeanFactory:422 Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@44b89233: defining beans [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,org.springframework.aop.config.internalAutoProxyCreator,appPush,appPushMsg2Client]; root of factory hierarchy Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'appPushMsg2Client' defined in class path resource [config/spring/applicationContext-messagePush.xml]: Invocation of init method failed; nested exception is java.rmi.ConnectException: Connection refused to host: 10.120.20.197; nested exception is: java.net.ConnectException: Connection refused: connect at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) at cn.com.sinosoft.ebusiness.messagePush.App.main(App.java:20) Caused by: java.rmi.ConnectException: Connection refused to host: 10.120.20.197; nested exception is: java.net.ConnectException: Connection refused: connect at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619) at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216) at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202) at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:341) at sun.rmi.registry.RegistryImpl_Stub.list(Unknown Source) at org.springframework.remoting.rmi.RmiServiceExporter.testRegistry(RmiServiceExporter.java:420) at org.springframework.remoting.rmi.RmiServiceExporter.getRegistry(RmiServiceExporter.java:331) at org.springframework.remoting.rmi.RmiServiceExporter.prepare(RmiServiceExporter.java:268) at org.springframework.remoting.rmi.RmiServiceExporter.afterPropertiesSet(RmiServiceExporter.java:229) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417) ... 12 more Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:579) at java.net.Socket.connect(Socket.java:528) at java.net.Socket.<init>(Socket.java:425) at java.net.Socket.<init>(Socket.java:208) at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40) at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:147) at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613) ... 22 more
如果注释掉这一行
<property name="registryHost" value="${ServiceRegistryIp}" />
发布的时候从日志上看是外网的IP,现在发布服务的时候要强制绑定到内网的IP上。求解决方法,谢谢!
相关推荐
在Spring框架的支持下,我们可以更方便地将服务发布为RMI服务,使得其他应用程序可以跨JVM(Java Virtual Machine)访问这些服务。下面将详细阐述Spring RMI服务的实现原理、配置过程以及如何自动化发布服务。 首先...
通过Spring的Bean工厂,我们可以将RMI服务声明为Spring Bean,这样就可以利用Spring的依赖注入来配置和服务。此外,Spring AOP可以用于在远程方法调用前后添加拦截逻辑,如日志记录、性能监控等。 具体到这个压缩包...
- **负载均衡**:通过RMI注册表,可以将请求分发到多个服务实例,提高系统可用性。 ### 6. Spring Boot与RMI Spring Boot简化了Spring应用程序的启动和配置,包括RMI服务。在Spring Boot应用中,可以通过配置文件...
2.4 启动RMI服务器:运行包含上述配置的Spring上下文,服务将自动发布到RMI注册表。 三、创建Spring RMIClient 3.1 引入远程服务:在客户端项目中,同样需要定义远程接口,并确保客户端可以访问服务器端的接口。 ...
Spring提供了对RMI的高级抽象,通过其`org.springframework.remoting.rmi`包,使得RMI服务的创建、配置和暴露变得更加简单。在Spring MVC项目中,我们可以将RMI服务作为一个Bean来管理,这样可以充分利用Spring的...
- **负载均衡**:在大型分布式系统中,可能有多台服务器提供RMI服务。Spring可以配合负载均衡工具(如Apache HttpClient或Netflix Ribbon)来决定请求应发送到哪个服务器。 4. **挑战与最佳实践**: - **性能优化...
- **`<bean>`标签中的`rmi:`命名空间**:Spring配置文件中可以使用`<rmi:registry>`来定义RMI注册表,`<rmi:export>`用于导出远程服务。 - **`RmiServiceExporter`**:Spring提供的bean,负责将Spring Bean暴露为...
- 在`rmi_spring_server`项目中,包含了服务器端的代码,实现了RMI服务的发布。 - 在`rmi_spring_client`项目中,包含了客户端的代码,实现了对服务器端RMI服务的调用。 通过上述整合,我们可以构建一个健壮的...
spring 与rmi 的整合 1.首先编写接口 interface : 这里的接口要继承Remote, 它是一个标识接口 2.编写实现类 3.编写main方法用于启动 service 4 配置spring文件 编写客户端测试类
在本示例中,我们将探讨如何使用Spring RMI创建一个小的应用程序,这通常涉及到服务器端(服务提供者)和客户端(服务消费者)的设置。 首先,让我们了解Spring RMI的核心概念: 1. **接口定义**:在RMI中,我们...
3. **Spring配置**:在Spring配置文件中,你需要声明一个`RmiServiceExporter`,它会暴露你的服务实现为RMI服务。你可以通过指定`serviceInterface`和`serviceImplementation`属性来关联接口和实现。 4. **客户端...
5. **Spring配置**:在Spring的配置文件中,可以使用`<bean>`标签定义RMI服务,并使用`<lookup-method>`标签来查找并注入远程对象。 ```xml <bean id="myServiceExporter" class="org.springframework.remoting...
2. **Spring RMI 服务器**:Spring 支持通过 `RmiServiceExporter` 将 Spring 管理的bean导出为 RMI 服务。只需将这个类添加到 Spring 配置中,指定要导出的 bean 和接口即可。 3. **事务管理**:Spring 的 AOP ...
在IT行业中,Spring框架是Java开发中的一个基石,它提供了丰富的功能来简化应用程序的构建,包括远程过程调用(Remote Method Invocation,RMI)服务。本文将深入探讨"spring rmi 改造"这一主题,主要关注如何在原有...
Spring RMI整合了RMI机制,提供了一种更加灵活和易于管理的方式,让开发者可以在Spring容器中定义远程服务,并通过Spring的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)特性来增强这些服务。...
Spring RMI(Remote Method Invocation)是Java平台上的远程方法调用技术,结合Spring框架的特性,使得在分布式系统中调用远程服务变得更加便捷。在这个简单的例子中,我们将深入理解Spring RMI的工作原理以及如何...
Java Spring与RMI(Remote Method Invocation)的整合是企业级应用中常见的远程服务交互方式。Spring框架提供了对RMI的支持,使得开发者能够方便地在分布式环境中进行服务的调用。这个压缩包文件“Spring+RMI”很...
3. **配置RMIServer**:在Spring配置文件中,使用`RmiRegistryFactoryBean`创建RMI注册表,并使用`RmiServiceExporter`导出远程服务。 ```xml <bean id="registry" class="org.springframework.remoting.rmi....
RMI的一个重要优势是它可以在多个应用之间共享服务,提高了代码的重用性。然而,RMI也存在一些限制,如性能可能受到网络延迟的影响,且不支持跨语言调用。随着现代技术的发展,如HTTP/RESTful API、gRPC等,RMI的...
服务器端工程包含RMI服务的实现和配置,而客户端工程则展示了如何通过Spring的RMI代理访问这些服务。通过分析和运行这两个示例,开发者可以深入理解Spring框架与RMI的整合,以及如何在实际项目中应用这一技术。 ...