# 范化调用
## 说明
背景:有时需在程序运行时根据传入的参数动态调用不同的远程服务,此时就需要范化调用。
需注入 com.guosen.zebra.core.grpc.server.GenericService,然后根据要调用的微服务构建 JSON 格式的的参数。
## 代码样例
```java
@ZebraReference
private GenericService genericService;
public String sayHello(String name) {
JSONObject parameter = new JSONObject();
parameter.put("name", name);
JSONObject result = genericService.$invoke(
"com.guosen.zebra.sample.start.svc1.service.HelloService",
ZebraConstants.DEFAULT_GROUP,
ZebraConstants.DEFAULT_VERSION,
"sayHello",
parameter);
}
```
如上图,通过 @ZebraReference 注入 GenericService,然后使用其 $invoke 接口。
1. 请求参数说明如下:
| 请求参数 | 说明 |
| :--- | :--- |
| serviceName(第一个参数) | 要调用的微服务全称 |
| group(第二个参数) | 要调用的微服务集群,一般使用默认值 ZebraConstants.DEFAULT\_GROUP |
| version(第三个参数) | 要调用的微服务版本,一般使用默认值 ZebraConstants.DEFAULT\_VERSION |
| method(第四个参数) | 微服务接口的方法名 |
| arg(第五个参数) | 要调用的方法的 JSON 格式的请求参数 |
2. 返回参数
函数的返回值为 JSON 格式的返回值,key 请参考接口的 PB 定义。
- 简介
- 入门
- Docker方式
- 手工方式
- 环境搭建
- 简述
- 初始化服务器
- 安装 Etcd
- 初始化数据库
- 安装配置中心
- 安装服务中心
- 安装监控中心
- 安装API网关
- 开发第一个微服务
- 简述
- 准备工作
- 接口定义
- 实现
- 配置
- 部署
- 验证
- 微服务开发
- 服务调用
- 服务上下文
- 日志
- 高级特性
- 范化调用
- 异步调用
- ACL 控制
- 慢启动
- 消息大小
- 组件使用
- 简述
- 缓存
- MyBatis
- RocketMQ
- 分库分表
- 读写分离
- 分布式事务
- 分布式锁
- 运维管理
- 服务依赖
- 服务查询
- 服务方法查询
- 配置中心
- API网关配置
- 流量控制
- 简述
- 限流
- 熔断
- 系统保护
- 白名单
- 黑名单
- 监控
- 主动探测
- 调用链
- 日志开关
- 最佳实践
- 常见问题
- 深入 Zebra
- 架构
- 通信协议
- 路标
