# rpc-client **Repository Path**: Lynns/rpc-client ## Basic Information - **Project Name**: rpc-client - **Description**: RPC远程调用客户端SDK - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-02-26 - **Last Updated**: 2025-02-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## rpc-client Rpc的远程调用组件,技术原理:JDK动态代理 + Http请求 ##### 使用说明 1. pom 导入包 ```xml cn.linjianhui.api rpc-client 1.0-SNAPSHOT ``` 2. 配置依赖注入扫描包名(SpringBoot项目) ```java @SpringBootApplication(scanBasePackages = {"cn.linjianhui.api"}) public class CubeApiYqApplication { public static void main(String[] args) throws Throwable { SpringApplication.run(CubeApiYqApplication.class, args); } } ``` 3. 添加远程API调用工厂类 ```java @Component public class APIProxyFactory { // 当前项目名称 private final static String PROJECTNAME = "cn.linjianhui.api.client"; @Autowired private ProxyFactory ProxyFactory; // 从当前调用栈,获取ClientId,用于记录接口调用项目和调用当前方法 private static String GetClientId(StackTraceElement[] stackTrace) { for (int i = stackTrace.length - 1; i >= 0; i--) { StackTraceElement element = stackTrace[i]; int index = element.getClassName().indexOf(PROJECTNAME); if(index != -1) { return String.format("%s;Method:%s;Line:%s", element.getClassName().substring(index), element.getMethodName(), element.getLineNumber()); } } return null; } public T CreateService(Class tClass) { String clientId = GetClientId(Thread.currentThread().getStackTrace()); return ProxyFactory.Create(tClass, clientId); } } ``` 4. 创建API调用代理对象 ```java @SpringBootApplication @RunWith(SpringRunner.class) @SpringBootTest public class ApplicationTest { @Autowired private APIProxyFactory APIProxyFactory; @Test public void testAdService() { IAdService service = APIProxyFactory.CreateService(IAdService.class); List adInfoList = service.GetAdList("m_ad_hot_keywords", "m"); for (AdInfo info : adInfoList) { System.out.println(info.getText()); } } } ``` ```java import cn.linjianhui.api.client.annotation; import java.util.List; @Service("CMS.AdService") public interface IAdService { List GetAdList(String adPlaceId, String platForm); } ``` ```java import lombok.Getter; import lombok.Setter; import java.time.LocalDateTime; @Getter @Setter public class AdInfo { // 链接文字 private String Text; } ```