轻量级高性能 RPC 框架 HRPC
- 授权协议: GPL
- 开发语言: Java
- 操作系统: 跨平台
- 软件首页: https://github.com/wosyingjun/HRPC
- 软件文档: https://github.com/wosyingjun/HRPC
软件介绍
HRPC
特性
采用Protostuff序列化;
高性能,负载均衡;
支持服务的注册和订阅;
支持同步及异步2种调用方式;
长连接,自动重连;
采用cglib动态代理;
代码简答,易上手;
支持Spring;
HRPC结构图
服务注册中心
服务端
1. 通过Spring配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--扫描需求发布的服务所在的包-->
<context:component-scan base-package="com.yingjun.rpc.service.impl"/>
<context:property-placeholder location="classpath:system.properties"/>
<!--服务端配置-->
<bean id="rpcServer" class="com.yingjun.rpc.server.RPCServer">
<constructor-arg name="zookeeper" value="${zookeeper.address}"/>
<constructor-arg name="serverAddress" value="${server.address}"/>
</bean>
</beans>2. 服务接口
public interface UserService {
public User getUser(String phone);
public User updateUser(User user);
}3. 注册服务实现
@HRPCService(UserService.class)
public class UserServiceImpl implements UserService {
@Override
public User getUser(String phone) {
User user =new User(111,"yingjun",phone);
return user;
}
@Override
public User updateUser(User user) {
user.setName("yingjun@update");
return user;
}
}客户端
1. Spring配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
<context:property-placeholder location="classpath:system.properties"/>
<!--客户端配置-->
<bean id="rpcClient" class="com.yingjun.rpc.client.RPCClient">
<constructor-arg name="zookeeper" value="${zookeeper.address}"/>
<!--订阅需要用到的接口-->
<constructor-arg name="interfaces">
<list>
<value>com.yingjun.rpc.service.OrderService</value>
<value>com.yingjun.rpc.service.UserService</value>
<value>com.yingjun.rpc.service.GoodsService</value>
</list>
</constructor-arg>
</bean>
</beans>2. 同步调用
UserService userService = rpcClient.createProxy(UserService.class);
User user1 = userService.getUser("188888888");
logger.info("result:" + user1.toString());3. 异步调用
AsyncRPCProxy asyncProxy = rpcClient.createAsyncProxy(UserService.class);
asyncProxy.call("getUser", new AsyncRPCCallback() {
@Override
public void success(Object result) {
logger.info("result:" + result.toString());
}
@Override
public void fail(Exception e) {
logger.error("result:" + e.getMessage());
}
}, "188888888");为什么选择Protostuff ?
Introduction to Computation and Programming Using Python
John V. Guttag / The MIT Press / 2013-7 / USD 25.00
This book introduces students with little or no prior programming experience to the art of computational problem solving using Python and various Python libraries, including PyLab. It provides student......一起来看看 《Introduction to Computation and Programming Using Python》 这本书的介绍吧!
