{
e.printStackTrace();
}
/**
*解析REST接口的响应结果,解析成JSON对象并且返回给调用者
*/
RestOut result = JsonUtil.jsonToPojo(responseData,
new TypeReference
return result;
}
//完成对REST接口api/demo/echo/{0}/v1的调用
public RestOut echo(String word)
{
/**
*远程调用接口的方法,完成demo-provider的REST API远程调用
*REST API功能:回显输入的信息
*/
String uri = “api/demo/echo/{0}/v1”;
/**
*组装REST接口URL
*/
String restUrl = contextPath + MessageFormat.format(uri, word);
log.info(“restUrl={}”, restUrl);
/**
*通过HttpClient组件调用REST接口
*/
String responseData = null;
try
{
responseData = HttpRequestUtil.simpleGet(restUrl);
} catch (IOException e)
{
e.printStackTrace();
}
/**
解析
接
的响应结果
解析成
对象
并且返回给调用者 *解析REST接口的响应结果,解析成JSON对象,并且返回给调用者
*/
RestOut result = JsonUtil.jsonToPojo(responseData,
new TypeReference
return result;
}
}
以上简单的RPC实现类RealRpcDemoClientImpl的测试用例如下:
package com.crazymaker.demo.proxy.basic;
…
/**
*测试用例
*/
@Slf4j
public class ProxyTester
{
/**
*不用代理,进行简单的远程调用
*/
@Test
public void simpleRPCTest()
{
/**
*简单的RPC调用类
*/
MockDemoClient realObject = new RealRpcDemoClientImpl();
/**
*调用demo-provider的REST接口api/demo/hello/v1
*/
RestOut result1 = realObject.hello();
log.info(“result1={}”, result1.toString());
/**
*调用demo-provider的REST接口api/demo/echo/{0}/v1
*/
RestOut result2 = realObject.echo(“回显内容”);
log.info(“result2={}”, result2.toString());
}
}
运行测试用例之前,需要提前启动demo-provider微服务实例,然后将主机名称crazydemo.com通过hosts文件绑定到demo-provider实例所在机器的IP地址(这里为127.0.0.1),并且需要确保两个REST接口/api/demo/hello/v1、/api/demo/echo/{word}/v1可以正常访问。
运行测试用例,部分输出结果如下:
[main] INFO c.c.d.p.b.RealRpcDemoClientImpl - restUrl=http://crazydemo.com:7700/demo-provider/ api/demo/hello/v1
[main] INFO c.c.d.proxy.basic.ProxyTester - result1=RestOut{datas={“hello”:“world”}, respCode=0, respMsg='操作成功}
[main] INFO c.c.d.p.b.RealRpcDemoClientImpl - restUrl=http://crazydemo.com:7700/demo-provider/ api/demo/echo/回显内容/v1
[main] INFO c.c.d.proxy.basic.ProxyTester - result2=RestOut{datas={“echo”:“回显内容”}, respCode=0, respMsg='操作成功}
以上的RPC客户端实现类很简单,但是实际开发中不可能为每一个远程调用Java接口都编写一个RPC客户端实现类。如何自动生成RPC客户端实现类呢?这就需要用到代理模式。接下来为大家介绍简单一点的代理模式实现类——静态代理模式的RPC客户端实现类。
从基础原理讲起:代理模式与RPC客户端实现类
======================
首先来看一下代理模式的基本概念。代理模式的定义:为委托对象提供一种代理,以控制对委托对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个目标对象,而代理对象可以作为目标对象的委托,在客户端和目标对象之间起到中介的作用。
代理模式包含3个角色:抽象角色、委托角色和代理角色,如图3-3所示。