基于 Hessian 通信的客户端和服务端的实现

目录

一 RPC 是什么

二 Hessian 是什么

三 服务端实现

3.1 创建 Hessian 接口

3.2 创建 Hessian 接口的实现类

3.3 配置 Hessian 服务端接口服务

四 客户端实现

4.1 客户端引入 jar 包依赖,客户端实现。

4.2 客户端调用


一 RPC 是什么

       RPC,Remote Procedure Call,顾名思义就是远程过程调用,一般都有跨语言支持。大规模分布式应用中普遍使用 RPC 来做内部服务、模块之间的数据通信,有助于解耦服务、系统的垂直拆分,使得系统可扩展性更强。

       RPC 分为客户端(服务调用方)和服务端(服务提供方),都运行在自己的 JVM 中。客户端只需要引入要使用的接口,接口的实现和运行都在服务端。RPC 主要依赖的技术包括序列化、反序列化和数据传输协议,这是一种定义与实现相分离的设计,如图所示:

二 Hessian 是什么

       Hessian 是一个基于 HTTP 协议的 RPC 方案,自己实现序列化,负载均衡和容错需要依赖于 Web 容器/服务,其实现方式如图所示:

三 服务端实现

3.1 创建 Hessian 接口

public interface UserRpcService {
    User getById(long id);
}

3.2 创建 Hessian 接口的实现类

@Service
public class UserRpcServiceImpl implements UserRpcService {

    @Override
    public User getById(long id) {
        //业务逻辑
    }

}

3.3 配置 Hessian 服务端接口服务

@EnableWebMvc
@SpringBootConfiguration
public class HessianService {

    @Resource
    private UserRpcService userRpcService;

    @Bean(name = "/rpc/userRpcService")
    public HessianServiceExporter hessianServiceExporter(){
        HessianServiceExporter hessianServiceExporter = new HessianServiceExporter();
        hessianServiceExporter.setServiceInterface(UserRpcService.class);
        hessianServiceExporter.setService(userRpcService);
        return hessianServiceExporter;
    }
}

服务端生成 jar 包给到客户端。

四 客户端实现

4.1 客户端引入 jar 包依赖,客户端实现。

@Configuration
public class HessainClient {

    @Value("${userRpcService.host}")
    private String userRpcServiceHost;

    @Value("${userRpcService.timeout.connect}")
    private int connectionTimeOut;

    @Value("${userRpcService.timeout.read}")
    private int readTimeout;

    @Bean
    public HessianWithContextProxyFactoryBean userRpcService() {
        HessianWithContextProxyFactoryBean hessianWithContextProxyFactoryBean = new HessianWithContextProxyFactoryBean();
        hessianWithContextProxyFactoryBean.setServiceUrl(userRpcServiceHost);
        hessianWithContextProxyFactoryBean.setServiceInterface(UserRpcService.class);
        hessianWithContextProxyFactoryBean.setOverloadEnabled(true);
        hessianWithContextProxyFactoryBean.setConnectTimeout(connectionTimeOut);
        hessianWithContextProxyFactoryBean.setHessian2(true);
        hessianWithContextProxyFactoryBean.setReadTimeout(readTimeout);
        return hessianWithContextProxyFactoryBean;
    }
}

4.2 客户端调用

@Component
public class UserService {

    @Autowired
    UserRpcService userRpcService;

    public User getById(long id) {
        return userRpcService.getById(id);
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值