{"id":19794618,"url":"https://github.com/threadnew/powerrpc","last_synced_at":"2025-02-28T10:18:47.771Z","repository":{"id":229942941,"uuid":"311679915","full_name":"ThreadNew/PowerRPC","owner":"ThreadNew","description":"一款基于zookeeper、netty的小型的分布式的rpc框架","archived":false,"fork":false,"pushed_at":"2020-11-11T13:56:04.000Z","size":57,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-11T04:44:15.614Z","etag":null,"topics":["java","netty","nettyrpc","reflection","rpc","zookeeper"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ThreadNew.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2020-11-10T14:14:49.000Z","updated_at":"2021-01-02T07:47:17.000Z","dependencies_parsed_at":"2024-03-27T03:43:05.487Z","dependency_job_id":"ea1c7df0-eaac-47c7-8300-f7c4350df126","html_url":"https://github.com/ThreadNew/PowerRPC","commit_stats":null,"previous_names":["threadnew/powerrpc"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThreadNew%2FPowerRPC","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThreadNew%2FPowerRPC/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThreadNew%2FPowerRPC/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThreadNew%2FPowerRPC/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ThreadNew","download_url":"https://codeload.github.com/ThreadNew/PowerRPC/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241136843,"owners_count":19915999,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","netty","nettyrpc","reflection","rpc","zookeeper"],"created_at":"2024-11-12T07:13:43.924Z","updated_at":"2025-02-28T10:18:47.749Z","avatar_url":"https://github.com/ThreadNew.png","language":"Java","readme":"# PowerRPC\n\n\u003e PowerRPC是一款基于zookeeper、netty的小型的分布式的rpc框架\n\n---\n\n##### 特点\n\n- 注册中心可定制化；目前服务发现和服务注册采用zookeeper\n- 支持TCP的长连接\n- 支持不同的负载均衡的策略，可定制化。注：已实现策略 随机、加权随机\n- 消息序列化采用messagepack\n- 支持同步和异步调用\n- 支持配置文件配置\n\n---\n\n#### 入门案例\n\n#### **服务端**\n\n#####  1、配置文件\n\n```java \npower.rpc.registry.server.ip=192.168.168.135:2181 #zookeeper的注册中心的地址\npower.rpc.server.name=myapp # 服务的名称 唯一标志\npower.rpc.server.port=8311 # 服务的端口号\n```\n\n##### 2、创建简单的服务\n\n\u003e 创建接口及其实现类\n\n```java\npackage tn.threadnew.powerrpc.info;\n\npublic interface UserInfo {\n    public String getName(String name);\n    public int add(int a,int b);\n    public String acc(String a, int b);\n}\n```\n\nimpl\n\n```java\npackage tn.threadnew.powerrpc.info;\n\nimport tn.threadnew.powerrpc.rpc.netty.annotation.RpcService;\n\n/**\n * @Author: ThreadNew\n * @Description: TODO\n * @Date: 2020/11/4 22:04\n * @Version: 1.0\n */\n@RpcService(version = \"1.0\",  group = \"info\")\npublic class Stu implements UserInfo {\n\n    @Override\n    public String getName(String name) {\n        return name;\n    }\n\n    @Override\n    public int add(int a, int b) {\n        return a + b;\n    }\n\n    public String acc(String a, int b) {\n        return a + \"   cen \" + b;\n    }\n\n\n}\n```\n\n\u003e 在具体的服务上加上@RpcService服务注解即可。\n\u003e\n\u003e @RpcService的参数讲解\n\u003e\n\u003e version :服务的版本号\n\u003e\n\u003e group：服务分组 ：其作用是区别同一接口的不同实现类 \n\n##### 3、服务端的使用\n\n```java\npublic class Server {\n    private ServerProxy sp = ServerProxy.newInstance();\n\n    @Test\n    public void start() throws Exception {\n        ZkConnectManager zk = new ZkConnectManager();\n        zk.load(\"zk.properties\");\n        sp.scan(\"tn.threadnew.powerrpc.info\").setRegister(zk).setConfig(zk.getConfig()).connect();\n       // Thread.sleep(5000000);\n    }\n}\n```\n\n\u003e 第一步： 创建与注册中心连接的管理器如ZkConnectManager ，\n\u003e\n\u003e 第二步：使用load函数加载配置文件\n\u003e\n\u003e 第三步： 创建服务代理器ServerProxy；使用newInstance() 函数创建对象\n\u003e\n\u003e 第四步：配置包扫描的路径 采用scan函数\n\u003e\n\u003e 第五步：注册注册中心；注册配置中心。\n\u003e\n\u003e 第六步：建立连接。\n\u003e\n\u003e \n\n**客户端**\n\n##### 1、配置文件\n\n```java \npower.rpc.registry.server.ip=192.168.168.135:2181 #zookeeper的注册中心的地址\n```\n\n##### 2、服务调用\n\n\u003e 提供要调用的接口\n\n```java\npublic interface UserInfo {\n    public String getName(String name);\n    public int add(int a,int b);\n    public String acc(String a, int b);\n}\n```\n\n\u003e 与注册中心建立连接\n\u003e\n\u003e 调用远程服务\n\n```java\npackage tn.threadnew.powerrpc.rpc;\n\nimport org.junit.Test;\nimport tn.threadnew.powerrpc.info.UserInfo;\nimport tn.threadnew.powerrpc.register.manage.ZkConnectManager;\nimport tn.threadnew.powerrpc.rpc.netty.client.proxy.Proxy;\n\n/**\n * @Author: ThreadNew\n * @Description: TODO\n * @Date: 2020/11/4 22:29\n * @Version: 1.0\n */\npublic class client {\n    // 第一步： 创建调用服务代理类\n    private Proxy proxy = Proxy.newInstance();\n\n    @Test\n    public void Test() throws Exception {\n        // 第二步：创建注册中心管理器\n        ZkConnectManager zk = new ZkConnectManager();\n        //第四步：加载配置文件\n        zk.load(\"zk.properties\");\n        //第五步：注册注册中心且建立连接\n        proxy.setRegister(zk).connect();\n        //第六步： 调用服务\n        UserInfo info = proxy.instance(UserInfo.class, \"1.0\", \"info\");\n        System.out.println(info.add(2, 3));\n        UserInfo info1 = proxy.call(UserInfo.class, \"1.0\", \"info\", new ResponseCallBack() {\n            @Override\n            public void done(Object o) {\n                Response re = (Response) o;\n                System.out.println(\"data  \" + re.getData());\n            }\n        });\n        info1.acc(\"che c\", 7);\n        Thread.sleep(50000);\n\n        proxy.close();\n    }\n\n}\n\n结果\n5\ndata  che c   cen 7\n```\n\n\u003e 服务的调用方式两种 **同步调用**和**异步调用**\n\u003e\n\u003e 1、 同步调用\n\u003e\n\u003e ```java\n\u003e 方法：instance(Class\u003cT\u003e clazz, String version, String group)\n\u003e clazz :服务接口的class对象\n\u003e version： 服务的版本号\n\u003e group： 服务分组\n\u003e ```\n\n\u003e 2、异步调用\n\u003e\n\u003e ```\n\u003e  方法：call(Class\u003cT\u003e clazz, String version, String group, ResponseCallBack callBack)\n\u003e  clazz :服务接口的class对象\n\u003e  version： 服务的版本号\n\u003e  group： 服务分组\n\u003e  callback ：异步回调函数 重写done方法。\n\u003e ```\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthreadnew%2Fpowerrpc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthreadnew%2Fpowerrpc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthreadnew%2Fpowerrpc/lists"}