# hserver-rpc-plugin
**Repository Path**: HServer/hserver-rpc-plugin
## Basic Information
- **Project Name**: hserver-rpc-plugin
- **Description**: HServer 异步 RPC 插件 性能管够
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2021-12-30
- **Last Updated**: 2025-03-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# hserver-rpc-plugin
## 不错得,纯异步RPC组件,性能管够
```xml
net.hserver.plugins.rpc
hserver-rpc-plugin
1.0
```
##### 默认模式
```java
//消费者:
@Configuration
public class Config {
@Bean
public RpcConfig rpcConfig() {
//创建一个配置对象
RpcConfig rpcConfig = new RpcConfig();
//设置当前RPC模型
rpcConfig.setRpcAdapter(new DefaultMode());
//设置提供者得信息,这里是8001服务提供一个provide的服务
/**
* 使用这样的代码就能调用provide的接口数据了
* @Resource(serverName = "provide")
* private Say say;
*/
RpcServer rpcServer = new RpcServer();
rpcServer.setHost("127.0.0.1");
rpcServer.setPort(8001);
rpcServer.setServerName("provide");
//将这个服务添加到配置,多个也可以多添加
rpcConfig.addRpcServer(rpcServer);
return rpcConfig;
}
}
//提供者:
@Configuration
public class Config {
@Bean
public RpcConfig rpcConfig() {
RpcConfig rpcConfig = new RpcConfig();
rpcConfig.setRpcAdapter(new DefaultMode());
return rpcConfig;
}
}
//默认模式,消费者直连提供者,无注册中心
```
##### Nacos模式
```java
//消费者 配置两个提供者
@Configuration
public class Config {
@Bean
public RpcConfig rpcConfig() {
RpcConfig rpcConfig = new RpcConfig();
NacosMode nacosMode = new NacosMode();
nacosMode.setRegisterAddress("127.0.0.1:8848");
nacosMode.setRegisterMyIp("127.0.0.1");
nacosMode.setRegisterMyPort(8002);
nacosMode.setRegisterName("Consumer");
rpcConfig.setRpcAdapter(nacosMode);
RpcServer rpcServer1 = new RpcServer();
rpcServer1.setIp("127.0.0.1");
rpcServer1.setPort(8001);
rpcServer1.setServerName("provide1");
RpcServer rpcServer2 = new RpcServer();
rpcServer2.setIp("127.0.0.1");
rpcServer2.setPort(8003);
rpcServer2.setServerName("provide2");
rpcConfig.addRpcServer(rpcServer1);
rpcConfig.addRpcServer(rpcServer2);
return rpcConfig;
}
}
//消费者1
@Configuration
public class Config {
@Bean
public RpcConfig rpcConfig() {
RpcConfig rpcConfig = new RpcConfig();
NacosMode nacosMode = new NacosMode();
nacosMode.setRegisterAddress("127.0.0.1:8848");
nacosMode.setRegisterMyIp("127.0.0.1");
nacosMode.setRegisterMyPort(8001);
nacosMode.setRegisterName("provide1");
rpcConfig.setRpcAdapter(nacosMode);
return rpcConfig;
}
}
//消费者2
@Configuration
public class Config {
@Bean
public RpcConfig rpcConfig() {
RpcConfig rpcConfig = new RpcConfig();
NacosMode nacosMode = new NacosMode();
nacosMode.setRegisterAddress("127.0.0.1:8848");
nacosMode.setRegisterMyIp("127.0.0.1");
nacosMode.setRegisterMyPort(8003);
nacosMode.setRegisterName("provide2");
rpcConfig.setRpcAdapter(nacosMode);
return rpcConfig;
}
}
//使用Naocs模式可以方便的上下线服务
```
##### 自定义注册中模式
- DefaultMode
- NacosMode
基本流程是先实现 RpcAdapter接口,通过 RpcClient的reg方法进行注册,或者通过remove进行移除(比如nacos的服务上下线就通过remove和重新reg进行操作完成)
可以更具现有的例子用redis实现一个注册中心也是欧克的
```java
public class DefaultMode implements RpcAdapter {
private static final Logger log = LoggerFactory.getLogger(DefaultMode.class);
@Override
public void rpcMode(List rpcServers, List serverNames) {
for (RpcServer rpcServer : rpcServers) {
if (serverNames.contains(rpcServer.getServerName())) {
RpcClient.reg(rpcServer);
}else {
log.warn("{} 服务没用上建议不配置", rpcServer.getServerName());
}
}
}
}
public class NacosMode implements RpcAdapter {
private static final Logger log = LoggerFactory.getLogger(NacosMode.class);
//注册中心地址
private String registerAddress;
//注册名字
private String registerName;
//注册我的Ip
private String registerMyIp;
//注册我的端口
private Integer registerMyPort;
private String groupName = Constants.DEFAULT_GROUP;
public void setRegisterAddress(String registerAddress) {
this.registerAddress = registerAddress;
}
public void setRegisterName(String registerName) {
this.registerName = registerName;
}
public void setRegisterMyIp(String registerMyIp) {
this.registerMyIp = registerMyIp;
}
public void setRegisterMyPort(Integer registerMyPort) {
this.registerMyPort = registerMyPort;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
@Override
public void rpcMode(List rpcServers, List serverNames) {
if (this.registerAddress == null) {
throw new NullPointerException("Nacos注册地址不能为空");
}
if (this.registerName == null) {
throw new NullPointerException("Nacos注册的名字不能为空");
}
if (this.registerMyIp == null) {
throw new NullPointerException("Nacos注册的自己的IP不能为空");
}
if (this.registerMyPort == null) {
throw new NullPointerException("Nacos注册的自己的Port不能为空");
}
try {
/**
* nacos 客服端
*/
NamingService naming = NamingFactory.createNamingService(this.registerAddress);
naming.registerInstance(this.registerName, this.groupName, this.registerMyIp, this.registerMyPort, this.registerName);
/**
* 订阅注册的数据
*/
subProviderInfo(naming, rpcServers);
} catch (Exception e) {
e.printStackTrace();
}
}
private void subProviderInfo(NamingService naming, List rpcServers) {
/**
* 按需订阅属于自己的需要的服务
*
*/
rpcServers.forEach(regServerName -> {
try {
EventListener listener = event -> {
if (event instanceof NamingEvent) {
NamingEvent evn = (NamingEvent) event;
List instances = evn.getInstances();
log.info("服务变化:" + instances);
//节点变化,主动对上下线关系进行清除,重新设置
RpcClient.remove(regServerName);
for (Instance instance : instances) {
RpcServer rpcServer = new RpcServer();
rpcServer.setServerName(regServerName.getServerName());
rpcServer.setPort(instance.getPort());
rpcServer.setIp(instance.getIp());
//新变化的节点加入服务
RpcClient.reg(rpcServer);
}
}
};
naming.subscribe(regServerName.getServerName(), listener);
} catch (Exception e) {
log.warn(e.getMessage());
}
});
}
}
```