From e1d7d81544ce8f50bf68a3a1753c01e2069ede8a Mon Sep 17 00:00:00 2001 From: warren Date: Mon, 4 Jul 2022 18:33:59 +0800 Subject: [PATCH] =?UTF-8?q?abandon.x=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 102 ++++++++++++++++++++++++++++++++++++++++++++++-------- pom.xml | 1 + 2 files changed, 88 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 923d9d3..c89431f 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,100 @@ # coke-connect -#### 介绍 -基于spring cloud生态的跨服务rpc调用组件。支持eureka和nacos两种注册中心,支持负载均衡配置(默认轮询)。 +coke-connect是一款基于spring-cloud的方法级的跨服务调用工具。 -灵活的函数名称调用方式。 +coke-connect即提供了类open feign的client的调用方式,如下。 -#### 特点 -支持选配基于okHttps,smartSocket,netty作为跨服务调用的消息组件 +```java +import org.needcoke.rpc.annotation.RpcClient; -支持多种负载均衡策略 +@RpcClient(name = "cClient" , serviceId = "service-c" ,beanName = "c_bean") +public interface ConClient { -调用远程方法就像调用本地方法一样 + Object cTest2(String word); +} + +@RestController +@RequestMapping("api/b") +@RequiredArgsConstructor +public class TestController { + + private final ConnectorFactory connectorFactory; + + private final ConClient client; + + @GetMapping("test") + public String test() { + + return client.cTest2("hello"); + } +} + +``` +声明如上的一个connect client 即可实现调用服务类别为 service-c ,中的c_bean这个组件的 cTest2 方法 + +更有灵活的函数调用方式,如下: +```java +class Main { + public static void main(String[] args) { + InvokeResult result = connectorFactory.connector("bussiness-c").execute("cCon", "cTest2", args); + } +} + + + +public class InvokeResult implements Serializable { + + /** + * 状态 + */ + private int status; + + /** + * 响应时间 + */ + private long time; + + /** + * 结果 + */ + private Object body; +} + +``` -#### 展望 +coke-connect除了提供了基本的rpc调用方式之外,还提供了负载均衡,链路追踪,熔断等策略。默认的调用方式基于http,更可选配netty 和 smart-socket -@RpcClient注解的支持 +```java -接口快速失败 ,失败重试 +class config{ + + @Bean + public NettyInvoker nettyInvoker(){ + return new NettyInvoker(); + } -接口调用失败日志采集 ,链路追踪 ,实时分析修改注册中心中该节点的健康状态 + @Bean + public NettyServer nettyServer(){ + return new NettyServer(); + } -通过注册中心直接获取Rpc端口号(现在是从注册中心获取){ - step 1: 将rpc注解以metadata的方式存入注册中心,后续调用不需要调接口 - step 2: 适配spring-boot-protocol,采用代理的方式统一端口 - step 3: 覆盖主流tomcat 、undertow 、 jetty,增设拦截器,共享一个服务器 +// @Bean +// public SmartSocketInvoker nettyInvoker(){ +// return new SmartSocketInvoker(); +// } +// +// @Bean +// public SmartSocketServer nettyServer(){ +// return new SmartSocketServer(); +// } + + + //指定负载均衡策略 下面的例子是 响应时间决定权重 的负载均衡策略 + @Bean + public WeightedResponseTimeBalance weightedResponseTimeBalance(){ + return new WeightedResponseTimeBalance(); + } + } +``` \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9930c0f..85ea82f 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ pom abandon + https://gitee.com/needcoke/coke-connect abandon这个单词是词汇表的第一单词,coke-connect用于作为初始版本 -- Gitee