11 Star 26 Fork 9

無色眼镜 / dawdler-series

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 3.94 KB
一键复制 编辑 原始数据 按行查看 历史

dawdler-client

模块介绍

客户端核心代码,过滤器,服务发现,连接池,动态代理,aop实现,负载均衡等.

1. pom中引入依赖

 <groupId>dawdler</groupId>
 <artifactId>dawdler-client</artifactId>

2. client-conf.xml配置文件说明

例:

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <certificatePath>${CLASSPATH}key/dawdler.cer</certificatePath><!-- 身份验证 公钥路径 -->
    <server-channel-group channel-group-id="user"
                            connection-num="2"
                          session-num="4" serializer="2"
                          user="jackson.song" password="srchen">
    <!-- channel-group-id 标识id 一般用于@RemoteService(标识id),在服务器端是dawdler下deploys下部署的项目名称.
 connection-num 连接数
 session-num 会话数
 serializer 序列化方式(1,jdk默认,2 kroy,支持扩展)
 user 帐号
 password 密码
  -->
    </server-channel-group>
</config>

client-conf.xml支持多环境配置 参考统一配置中心与多环境支持.

3. api调用方式

public static void main(String[] args) throws Exception {
  Transaction tr = TransactionProvider.getTransaction("simple-service");//simple-servic为服务名
  tr.setServiceName("com.anywide.dawdler.demo.service.HelloService");//接口全名
  tr.setMethod("say");//方法名
  tr.addString("jackson");//参数 String类型并传值 Transaction有一系列传参方法 具体查看Transaction
  Object obj = tr.executeResult();//执行
  
  System.out.println(obj);
  
  ConnectionPool.shutdown(); 
 }

4. interface proxy 调用方式

@RemoteService("simple-service")
public interface HelloService {

 public String say(String text);
 
 public List<Message> responseList(Map<String, Object> data);
}
 HelloService hs = ServiceFactory.getService(HelloService.class);
 String response = hs.say("jackson");

5. 调用端过滤器 DawdlerClientFilter

实现DawdlerClientFilter接口,同时通过SPI方式扩展,支持@Order注解进行升序排序,具体可参考dawdler-circuit-breaker模块下的CircuitBreakerFilter.

6. 调用端负载均衡SPI扩展

目前提供随机负载与轮询负载.

继承AbstractLoadBalance抽象类,参考RoundRobinLoadBalance.构造方法中传入的name对应RemoteService注解中的loadBalance(默认为roundRobin).通过SPI方式配置LoadBalance文件中.

7. 异步调用

dawdler提供异步调用rpc的方式.

7.1 api调用

public static void main(String[] args) throws Exception {
  Transaction tr = TransactionProvider.getTransaction("user");
  tr.setServiceName("com.anywide.dawdler.demo.service.HelloService");//接口全名
  tr.setMethod("say");//方法名
  tr.addString("jackson");//参数 String类型并传值 Transaction有一系列传参方法 具体查看Transaction
  tr.setAsync(true);//设置为异步执行
  Object obj = tr.executeResult();//异步执行拿不到结果 返回的是null

  obj = AsyncInvokeFutureHolder.getContext().getInvokeFuture().getResult();//获取异步执行结果
  System.out.println(obj);
  
  ConnectionPool.shutdown(); 
 }

7.2 interface proxy 调用方式

@RemoteService("simple-service")
public interface HelloService {

 @RemoteServiceAssistant(async = true)//指定为异步
 public String say(String text);
 
 public List<Message> responseList(Map<String, Object> data);
}
  HelloService hs = ServiceFactory.getService(HelloService.class);
  hs.say("jackson");
  InvokeFuture<String> future = AsyncInvokeFutureHolder.getContext().getInvokeFuture();
  System.out.println(future.getResult());
  ConnectionPool.shutdown(); 
Java
1
https://gitee.com/srchen1987/dawdler-series.git
git@gitee.com:srchen1987/dawdler-series.git
srchen1987
dawdler-series
dawdler-series
master

搜索帮助