# 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;
}
```