我想知道spring是否有任何解决方案来支持使用进程内服务或远程服务的配置进行过程调用。
更新1
举个例子,假设我们有以下内容:
常见项目:
public interface ServiceBInterface {
boolean doSomething();
}
项目A(取决于公共(public)项目):
@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(取决于公共(public)项目):
@Service
public class ServiceB implements ServiceBInterface {
public boolean doSomething() {
boolean result = false;
// execute some code
return result;
}
}
我希望能够配置 ServiceBInterface bean 以通过以下选项进行初始化:
- ServiceB 的实例
- 某种对象的实例,它将向 ServiceB 发起 RPC,该 RPC 在 ServiceA 的不同进程上独立运行。
回答 项目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(取决于公共(public)项目):
@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;
}
}
最佳答案
抱歉,我不清楚你的问题,但我想知道你是否能够在阅读 Spring Integration Reference Manual 时为自己找到一些帮助。 。例如,有一个 RMI 支持,它表示为一对入站/出站网关,用于与远程过程服务进行通信。
否则,请更加具体,尤其是您想要达到的解决方案的代码示例。
关于spring - 远程/进程内服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32051169/