概述
pom引用
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>5.0.7</version>
</dependency>
服务端暴露接口:
1、定义接口
public interface DemoInterface {
BaseResponse get(QueryDTO dto);
}
2、接口实现类
@Slf4j
@Service
public class DemoInterfaceImpl implements DemoInterface {
@Override
public BaseResponse get(QueryDTO dto) {
return BaseResponse.success();
}
}
3、配置服务暴露
@Configuration
public class RemotingConfig {
@Resource
private DemoInterface demoInterface;
@Bean("/demoTest")
public HttpInvokerServiceExporter elasticUserFacade() {
HttpInvokerServiceExporter exporter = new HttpInvokerServiceExporter();
exporter.setService(demoInterface);
exporter.setServiceInterface(DemoInterface.class);
return exporter;
}
}
应用端调用:
1、引入相同的接口文件DemoInterface,可以用二方包的形式引入
2、配置远程调用
@Configuration
public class RemotingConfig {
@Bean
public HttpInvokerProxyFactoryBean demoInterfaceBean(){
HttpInvokerProxyFactoryBean factoryBean = new HttpInvokerProxyFactoryBean();
factoryBean.setServiceUrl( "http://www.test.com/demoTest");
factoryBean.setServiceInterface(DemoInterface.class);
factoryBean.setHttpInvokerRequestExecutor(httpComponentsHttpInvokerRequestExecutor());
return factoryBean;
}
@Bean
public HttpComponentsHttpInvokerRequestExecutor httpComponentsHttpInvokerRequestExecutor(){
HttpComponentsHttpInvokerRequestExecutor executor = new HttpComponentsHttpInvokerRequestExecutor();
return executor;
}
}
3、服务调用
@Service
public class DemoManager {
@Resource
private DemoInterface demoInterface;
public void get(String key) {
demoInterface.get(new QueryDTO(key));
}
}
注意:使用此种方式进行远程服务暴露,传递的参数如果是对象,需要实现Serializable接口,生成对应的serialVersionUID,因为参数传递的时候是转化成二进制的byte数据,在反序列化的时候需要根据UID确定唯一性,否则会报错
调用原理,时序图参考如下链接:
https://www.jianshu.com/p/6da39c67a586
https://my.oschina.net/u/2518341/blog/1800131
最后
以上就是舒服铃铛为你收集整理的springboot实现远程服务暴露与调用的全部内容,希望文章能够帮你解决springboot实现远程服务暴露与调用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复