第五课:调用模块源码分析1
需积分: 0 34 浏览量
更新于2022-08-08
收藏 51KB DOCX 举报
【第五课:调用模块源码分析1】
本课主要探讨了Dubbo框架中的非典型使用场景,包括泛化提供(Generic Service)、泛化引用(Generic Reference)以及隐式参数传递(Implicit Argument Passing)。这些特性使得开发者在面对特定需求时能更加灵活地使用Dubbo。
一、Dubbo 调用非典型使用场景
1. 泛化提供 & 引用:
泛化提供是一种特殊的暴露服务的方式,它不需要明确的接口定义,而是直接将服务实例暴露出去。这在Mock框架或服务降级场景中特别有用。下面是一个示例代码演示如何创建一个泛化服务:
```java
public static void doExportGenericService() {
// 创建应用配置
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("demo-provider");
// 创建注册中心配置
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setProtocol("zookeeper");
registryConfig.setAddress("192.168.0.147:2181");
// 创建协议配置
ProtocolConfig protocol = new ProtocolConfig();
protocol.setPort(-1);
protocol.setName("dubbo");
// 创建通用服务实现
GenericService demoService = new MyGenericService();
// 创建服务配置
ServiceConfig<GenericService> service = new ServiceConfig<>();
// 设置弱类型接口名
service.setInterface("com.tuling.teach.service.DemoService");
// 指向通用服务实现
service.setRef(demoService);
// 添加应用和注册中心配置
service.setApplication(applicationConfig);
service.setRegistry(registryConfig);
service.setProtocol(protocol);
// 暴露并注册服务
service.export();
}
```
泛化引用则是不通过常规接口调用服务的方式,适用于测试框架。下面是一个创建泛化引用的示例:
```java
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("demo-provider");
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setProtocol("zookeeper");
registryConfig.setAddress("192.168.0.147:2181");
ReferenceConfig<GenericService> reference = new ReferenceConfig<>();
reference.setInterface("com.tuling.teach.service.DemoService");
// 声明为泛化接口
reference.setGeneric(true);
reference.setApplication(applicationConfig);
reference.setRegistry(registryConfig);
// 获取引用并调用
GenericService genericService = reference.get();
Object result = genericService.$invoke("sayHello", new String[]{"java.lang.String"}, new Object[]{"world"});
```
2. 隐示传参:
隐示传参允许通过非方法参数传递额外的数据,类似于HTTP调用中的cookie。这种技术常用于分布式追踪系统,确保数据在整个请求链路中的传递。以下是如何使用隐示传参的示例:
```java
// 客户端设置隐示参数
RpcContext.getContext().setAttachment("index", "1");
// 服务端获取隐示参数
String index = RpcContext.getContext().getAttachment("index");
```
二、令牌验证:
通过令牌验证可以在注册中心层面控制权限,只允许有合法令牌的消费者获取服务。这种方式可以防止非法调用和保护服务安全。实现方式通常涉及在调用服务前检查令牌的有效性,如果验证失败,则拒绝服务请求。
总结,Dubbo的非典型使用场景展示了其强大的灵活性和可扩展性。泛化提供和引用简化了接口和服务的处理,隐示传参提供了数据传递的便利,而令牌验证则增强了服务的安全性。理解并熟练掌握这些特性,将有助于在实际项目中更好地运用和优化Dubbo服务。
航知道
- 粉丝: 32
- 资源: 301
最新资源
- Copy45 【IT教程网】25.第9章生成器.wmv
- Copy39 【IT教程网】13.第4章字典的创建和使用.wmv
- Copy51 【IT教程网】8.第2章序列.wmv
- Copy56 【IT教程网】21.第6章递归.wmv
- Copy52 【IT教程网】17.第5章循环.wmv
- 51单片机简易计算器(二) C程序、proteus仿真、报告、仿真操作视频 支持矩阵按键、LCD1602显示 支持简单的加减乘除运算功能
- Copy52 【IT教程网】19.第6章创建函数及参数.wmv
- Copy67 【IT教程网】15.第5章print和import及赋值.wmv
- Copy67 【IT教程网】32.第11章文件的读写及遍历.wmv
- 基于Higgs机制和广义相对论的连续生成宇宙学
- 【IT教程网】4.第2章IPyton_信息搜索.wmv
- Copy65 【IT教程网】44.第20-29章项目实例-处理XML.wmv
- Copy83 【IT教程网】1.课程简介.wmv
- Copy82 【IT教程网】3.IDLE使用简介.wmv
- factoryio视觉分拣仿真程序 使用简单的梯形图与SCL语言编写,通俗易懂,起到抛砖引玉的作用,比较适合有动手能力的入门初学者 软件环境: 1、西门子编程软件:TIA Portal V15(博图
- Copy78 【IT教程网】53.第20-29章项目实例-图形用户界面编程_4.wmv