• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

rpc: 轻量级分布式 RPC 框架

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

rpc

开源软件地址:

https://gitee.com/huangyong/rpc

开源软件介绍:

分布式 RPC 框架 - 使用说明

当前版本:1.3.0

发布日期:20151206

发布日志参见 RELEASE.md 文档

定义 RPC 接口

参见 rpc-sample-api 模块

package com.xxx.rpc.sample.api;public interface HelloService {    String hello(String name);}

需要将 RPC 接口与 RPC 实现分别存放在不同的模块中

发布 RPC 服务

参见 rpc-sample-server 模块

第一步:添加 Maven 依赖

pom.xml

<!-- RPC Sample API --><dependency>    <groupId>com.xxx.rpc</groupId>    <artifactId>rpc-sample-api</artifactId>    <version>${version.rpc}</version></dependency><!-- RPC Server --><dependency>    <groupId>com.xxx.rpc</groupId>    <artifactId>rpc-server</artifactId>    <version>${version.rpc}</version></dependency>
  • RPC Sample API:RPC 接口所在模块的依赖
  • RPC Server:RPC 服务端框架的依赖

第二步:实现 RPC 接口

package com.xxx.rpc.sample.server;import com.xxx.rpc.sample.api.HelloService;import com.xxx.rpc.server.RpcService;@RpcService(HelloService.class)public class HelloServiceImpl implements HelloService {    @Override    public String hello(String name) {        return "Hello! " + name;    }}
  • 必须在 RpcService 注解中指定 RPC 接口
  • 若 RPC 接口拥有多个实现类,则需要在 RpcService 注解中指定 version 属性加以区分

第三步:配置 RPC 服务端

spring.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xsi:schemaLocation="http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans.xsd       http://www.springframework.org/schema/context       http://www.springframework.org/schema/context/spring-context.xsd">    <context:component-scan base-package="com.xxx.rpc.sample.server"/>    <context:property-placeholder location="classpath:rpc.properties"/>    <!-- Service Registry -->    <bean id="serviceRegistry" class="com.xxx.rpc.registry.zookeeper.ZooKeeperServiceRegistry">        <constructor-arg name="zkAddress" value="${rpc.registry_address}"/>    </bean>    <!-- RPC Server -->    <bean id="rpcServer" class="com.xxx.rpc.server.RpcServer">        <constructor-arg name="serviceAddress" value="${rpc.service_address}"/>        <constructor-arg name="serviceRegistry" ref="serviceRegistry"/>    </bean></beans>
  • Service Registry:用于服务注册,若使用 ZooKeeper 实现,则需提供 ZooKeeper 地址、系统名、实例号
  • RPC Server:用于发布 RPC 服务,需要提供服务器端口

注册到 ZooKeeper 中的 ZNode 路径为:registry/service/address,前 2 个节点是持久的,最后 1 个节点是临时的

rpc.properties

rpc.service_address=127.0.0.1:8000rpc.registry_address=127.0.0.1:2181
  • rpc.service_address:发布 RPC 服务的地址
  • rpc.registry_address:ZooKeeper 服务器的地址

第四步:启动 RPC 服务

package com.xxx.rpc.sample.server;import org.springframework.context.support.ClassPathXmlApplicationContext;public class RpcBootstrap {    public static void main(String[] args) {        new ClassPathXmlApplicationContext("spring.xml");    }}

运行 RpcBootstrap 类,将对外发布 RPC 服务,同时进行服务注册

调用 RPC 服务

参见 rpc-sample-client 模块

第一步:添加 Maven 依赖

<!-- RPC Sample API --><dependency>    <groupId>com.xxx.rpc</groupId>    <artifactId>rpc-sample-api</artifactId>    <version>${version.rpc}</version></dependency><!-- RPC Client --><dependency>    <groupId>com.xxx.rpc</groupId>    <artifactId>rpc-client</artifactId>    <version>${version.rpc}</version></dependency>
  • RPC Sample API:RPC 接口所在模块的依赖
  • RPC Client:RPC 客户端框架的依赖

第二步:配置 RPC 客户端

spring.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xsi:schemaLocation="http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans.xsd       http://www.springframework.org/schema/context       http://www.springframework.org/schema/context/spring-context.xsd">    <context:property-placeholder location="classpath:rpc.properties"/>    <!-- Service Discovery -->    <bean id="serviceDiscovery" class="com.xxx.rpc.registry.zookeeper.ZooKeeperServiceDiscovery">        <constructor-arg name="zkAddress" value="${rpc.registry_address}"/>    </bean>    <!-- RPC Proxy -->    <bean id="rpcProxy" class="com.xxx.rpc.client.RpcProxy">        <constructor-arg name="serviceDiscovery" ref="serviceDiscovery"/>    </bean></beans>
  • Service Discovery:用于服务发现,若使用 ZooKeeper 实现,则需提供 ZooKeeper 地址
  • RPC Proxy:用于获取 RPC 代理接口

rpc.properties

rpc.registry_address=127.0.0.1:2181
  • rpc.registry_address:ZooKeeper 服务器的地址(IP 地址与端口)

第三步:调用 RPC 服务

@Autowiredprivate RpcProxy rpcProxy; // 1...HelloService helloService = rpcProxy.create(HelloService.class); // 2String result = helloService.hello("World"); // 3
  1. 注入 RpcProxy 对象
  2. 调用 RpcProxy 对象的 create 方法来创建 RPC 代理接口
  3. 调用 RPC 代理接口的方法,就像调用远程接口方法一样

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap