2015-08-17 81 views
3

我想知道spring是否有任何解决方案来支持使用在线服务或远程服务配置的过程调用。远程/正在处理服务

更新1

一个例子,可以说,我们有以下几点:

共同的项目:

public interface ServiceBInterface { 
    boolean doSomething(); 
} 

项目A(取决于通用项目):

@Service 
public class ServiceA { 

    @Autowired 
    private ServiceBInterface serviceB; 

    public void flowA() { 
      // run flow A code 
      boolean result = serviceB.doSomething(); 
      // continue run flow A code with result of service B 
    } 
} 

B项目(依靠普通项目CT):

@Service 
public class ServiceB implements ServiceBInterface { 
    public boolean doSomething() { 
     boolean result = false; 
     // execute some code 
     return result; 
    } 
} 

我想能够配置ServiceBInterface豆下列选项进行初始化:

  1. ServiceB
  2. 某种对象的实例的实例,它会将一个RPC转换为独立于ServiceA的不同进程上运行的ServiceB。

回答 项目A(取决于通用项目):

@Service 
    public class ServiceA { 

     @Autowired 
     private ServiceBInterface serviceB; 

@PostConstruct 
    public void init() { 
     if (Boolean.getBoolean("remote")) { 
      RmiProxyFactoryBean rmiProxyFactoryBean = new RmiProxyFactoryBean(); 
      rmiProxyFactoryBean.setServiceUrl("rmi://localhost:1099/ServiceB"); 
      rmiProxyFactoryBean.setServiceInterface(ServiceBInterface.class); 
      rmiProxyFactoryBean.setRefreshStubOnConnectFailure(true); 
      rmiProxyFactoryBean.setLookupStubOnStartup(false); 

      rmiProxyFactoryBean.afterPropertiesSet(); 
      serviceB = (ServiceBInterface) rmiProxyFactoryBean.getObject(); 
     } 
    } 
     public void flowA() { 
       // run flow A code 
       boolean result = serviceB.doSomething(); 
       // continue run flow A code with result of service B 
     } 
    } 

项目B(依赖于通用项目):

@Service 
    public class ServiceB implements ServiceBInterface { 

     RmiServiceExporter rmiServiceExporte; 
@PostConstruct 
public void init() throws RemoteException { 
     if (Boolean.getBoolean("remoteB")) { 
      rmiServiceExporter = new RmiServiceExporter(); 
      rmiServiceExporter.setServiceName("ServiceB"); 
      rmiServiceExporter.setService(serviceB()); 
      rmiServiceExporter.setServiceInterface(ServiceBInterface.class); 
      rmiServiceExporter.setServicePort(9999); 
      rmiServiceExporter.afterPropertiesSet(); 
     } 
    } 
     public boolean doSomething() { 
      boolean result = false; 
      // execute some code 
      return result; 
     } 
    } 
+0

阅读参考指南,关于远程处理的部分是你想要的,如果你想更详细的支持使用Spring Integration。 –

回答

1

对不起,你的问题是不清楚我,但是我想知道你是否能够通过阅读Spring Integration Reference Manual找到一些帮助。例如,RMI支持表示为一对入站/出站网关,以与远程过程服务进行通信。

否则,请更具体一些,尤其是您希望达到的解决方案代码示例。

+0

谢谢,请查看原始文章 –

+0

上的更新1,参考指南似乎提供了使用具有某种通道协议(tcp,amqp等)的服务激活器进行远程调用的解决方案。如果服务是在同一个进程的上下文中,它仍然会使用连接通道,我想避免它,因为一个简单的java调用就足够了,不需要通过一个通道 –