开源中国 2018 年度最后一场技术盛会邀你来约~错过就要等明年啦!点此立即预约

kailing / spring-rpc-learningJavaApache-2.0

Watch 2 Star 3 Fork 2
加入码云
与超过 300 万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
spring 内置Rpc组件,包含spring-hessian-rpc,spring-jms-rpc等Rpc组件接入使用示例 展开 收起

https://github.com/klboke/spring-rpc-learning

取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README.md

spring-rpc

什么是rpc? rpc(Remote Procedure Call)封装了内部实现的远程调用过程就是rpc,rpc主要为了简化远程服务调用。java体系的rpc,除了dubbo,集java大成者spring还默认提供了如下等Rpc组件支持。本项目就是这些Rpc组件的接入使用示例,基础环境使用spring boot2.x版本

  • spring-rmi-rpc
  • spring-hessian-rpc
  • spring-http-rpc
  • spring-jms-rpc
  • spring-amqp-rpc
  • spring-ws-rpc

基础环境

  • spring boot 2.0.5.RELEASE
  • activemq (spring-jms-rpc使用)
  • RabbitMQ (spring-amqp-rpc使用)

项目结构说明

整个项目maven层级分为三级,最外层包含RPC模块和基本的api模块,api模块会被所有的RPC模块引用。RPC模块内包含对应的提供者和消费者,比如spring-rpc-jms模块下,有jms-consumer,jms-provider,其他的类推

RPC实现说明

每个RPC都会实现api模块的抽象接口,如下:

/**
 * @WebService 注解只用于ws 提供的RPC服务
 */
@WebService
public interface AccountService {
     Account getAccount(String name);
}

以spring-ws-rpc作为例子,服务提供者实现如下,用以暴露服务:

@WebService(serviceName="AccountService",endpointInterface = "com.spring.rpc.api.AccountService")
@Service
public class AccountServiceImpl  extends SpringBeanAutowiringSupport implements  AccountService {

    Logger logger = LoggerFactory.getLogger(getClass());

    @Override
    @WebMethod
    public Account getAccount(String name) {
        logger.info("{} 请求获取账号!", name);
        Account account = new Account();
        account.setName(name + "的账号");
        return account;
    }
}

ws提供者配置:

/**
 * Created by kl on 2018/9/29.
 * Content : ws服务提供者配置
 */
@Configuration
public class WsConfig {
    @Bean
    public SimpleJaxWsServiceExporter rmiServiceExporter() {
        SimpleJaxWsServiceExporter exporter = new SimpleJaxWsServiceExporter();
        exporter.setBaseAddress("http://127.0.0.1:8083/");
        return exporter;
    }
}

服务消费者,消费服务配置实现如下:

/**
 * Created by kl on 2018/9/29.
 * Content :ws消费者(服务调用者)配置
 */
@Configuration
public class WsConfig {
    @Bean("accountService")
    public JaxWsPortProxyFactoryBean accountService()throws Exception{
        JaxWsPortProxyFactoryBean factoryBean = new JaxWsPortProxyFactoryBean();
        factoryBean.setServiceName("AccountService");
        factoryBean.setPortName("AccountServiceImplPort");
        factoryBean.setNamespaceUri("http://provider.ws.rpc.spring.com/");
        URL wsdlDocumentUrl = new URL("http://127.0.0.1:8083/AccountServiceImpl?WSDL");
        factoryBean.setWsdlDocumentUrl(wsdlDocumentUrl);
        factoryBean.setServiceInterface(AccountService.class);
        return factoryBean;
    }
}

如上,就可以在spring上下文环境中注入服务,调用服务:

	@Autowired
	private AccountService accountService;

	@PostConstruct
	public void callRpcService(){
		System.out.println("RPC远程访问开始!");
		System.err.println(accountService.getAccount("kl").getName());
		System.out.println("RPC远程访问结束!");
	}

点评 ( 0 )

你可以在登录后,发表评论

搜索帮助