服务消费者:启动时向注册中心订阅自己感兴趣的服务 , 以便获得服务提供方的地址列表 。
注册中心 :负责服务的注册和发现 , 负责保存服务提供方上报的地址信息 , 并向服务消费方推送 。
监控中心:负责收集服务提供方和消费方的运行状态 , 比如服务调用次数、延迟等 , 用于监控 。
运行容器:负责服务提供方的初始化、加载以及运行的生命周期管理 。
文章插图
部署阶段
服务提供者在指定端口暴露服务 , 并向注册中心注册服务信息 。
服务消费者向注册中心发起服务地址列表的订阅 。
运行阶段
注册中心向服务消费者推送地址列表信息 。
服务消费者收到地址列表后 , 从其中选取一个向目标服务发起调用 。
调用过程服务消费者和服务提供者的运行状态上报给监控中心 。
基于 API 的 Dubbo 应用
Dubbo 的应用一般都是通过 Spring 来组装的 。为了快速获得一个可以工作的 Dubbo 应用 , 这里的示例摒弃了复杂的配置 , 而改用面向 Dubbo API 的方式来构建服务提供者和消费者 , 另外 , 注册中心和监控中心在本示例中也不需要安装和配置 。
在生产环境 , Dubbo 的服务需要一个分布式的服务注册中心与之配合 , 比如 , ZooKeeper 。为了方便开发 , Dubbo 提供了直连[2]以及组播[3]两种方式 , 从而避免额外搭建注册中心的工作 。在本例中 , 将使用组播的方式来完成服务的注册和发现 。
定义服务契约
文章插图
说明:
定义了一个简单的服务契约 GreetingsService , 其中只有一个方法 sayHi 可供调用 , 入参是 String 类型 , 返回值也是 String 类型 。
提供契约的实现
文章插图
说明:
服务提供者需要实现服务契约 GreetingsService 接口 。
该实现简单的返回一个欢迎信息 , 如果入参是 dubbo , 则返回 hi, dubbo 。
实现 Dubbo 服务提供方
文章插图
说明:
创建一个 ServiceConfig 的实例 , 泛型参数信息是服务接口类型 , 即 GreetingsService 。
生成一个 AplicatonConfig 的实例 , 并将其装配进 ServiceConfig 。
生成一个 RegistryConfig 实例 , 并将其装配进 ServiceConfig , 这里使用的是组播方式 , 参数是 multicast://224.5.6.7:1234 。合法的组播地址范围为:224.0.0.0 - 239.255.255.255
将服务契约 GreetingsService 装配进 ServiceConfig 。
将服务提供者提供的实现 GreetingsServiceImpl 的实例装配进 ServiceConfig 。
ServiceConfig 已经具备足够的信息 , 开始对外暴露服务 , 默认监听端口是 20880 。
为了防止服务端退出 , 按任意键或者 ctrl-c 退出 。
实现 Dubbo 服务调用方
文章插图
说明:
创建一个 ReferenceConfig 的实例 , 同样 , 泛型参数信息是服务接口类型 , 即 GreetingService 。
生成一个 AplicatonConfig 的实例 , 并将其装配进 ReferenceConfig 。
生成一个 RegistryConfig 实例 , 并将其装配进 ReferenceConfig , 注意这里的组播地址信息需要与服务提供方的相同 。
将服务契约 GreetingsService 装配进 ReferenceConfig 。
从 ReferenceConfig 中获取到 GreetingService 的代理 。
通过 GreetingService 的代理发起远程调用 , 传入的参数为 dubbo 。
打印返回结果 hi, dubbo 。
运行
由于配置了 exec-maven-plugin , 可以很方便的在命令行下通过 maven 的方式执行 。当然 , 您也可以在 IDE 里直接执行 , 但是需要注意的是 , 由于使用了组播的方式来发现服务 , 运行时需要指定:
-Djava.net.preferIPv4Stack=true 。
推荐阅读
- 如何阅读源码?
- 教你五分钟重装Win 10!再也不怕笔记本蓝屏了
- 淘宝下单如何修改价格 淘宝店铺怎么修改价格
- 浏览器是如何将用户数据发送到服务器的?
- 网络工程师快速入门---网络架构及传输介质详解
- 简单查询自己电脑是否被入侵,两招教你查看黑客入侵,拒绝做肉鸡
- 还在担心KMS激活会损坏电脑系统?教你如何正确使用
- 大学生如何提升思想道德和法治素养?
- 淘宝权重的计算方法 淘宝权重如何计算公式
- 淘宝开店怎么发货给别人 淘宝商家是如何发货的?