一个服务通常分两个模块=实现功能的模块+对外提供接口以供调用的share(api)
- 对外share的模块 发布maven的远程私服上
其他服务需要调用就在pom中引入这个share dependecy进行接口调用 - 现实公司都会自己创建一套公共所有接口 使用的response类
属性包含 接口返回data 错误码 错误原因 业务是否处理成功等
@FeignClient(name="myApplication",url="${myApplication-share}")
public interface myApplicationApi{
@RequestMapping(path="/workApi/add",method=RequestMethod.POST)
public @ResponseBody MyResponse<addDTO> add(@RequestBody AddDTO addDTO);
@RequestMapping(path="/workApi/delete",method=RequestMethod.POST)
public @ResponseBody MyResponse<deleteDTO> delete(@RequestBody DeleteDTO deleteDTO);
}
其他服务就可以引入share进行接口调用
真正实现功能的服务也需要引入这个depedency 进行接口的实现
服务治理–DUBBO的进化
服务之间通过RPC调用然而不止需要RPC 也需要服务之间的治理
一对一的服务调用 融合rpc框架dubbo 只需在配置文件(或注解)写明对应关系
服务提供者声明自身名字
使用的dubbo的端口 协议
写明 借由dubbo这个框架要向外提供的接口 @Service
服务调用者 写明自身应用名字 和 获取指定的远程服务代理对象 @Reference(url=“dubbo://192.168.12.1:28080/com.guigu.chat.IHelloService”)
多个服务调用 dubbo+zookeeper
无需指定 提供者和消费者一一对应关系 只需在彼此之间配置相同的服务注册中心地址即可
dubbo注册到zookeeper上
dubbo.register.adress=zookeeper://192.168.12.106:2181
为什么使用zookeeper
zookeeper拥有以下特点 便于实现注册中心的功能
有临时节点、持久化节点、有序节点、容器节点、TTL节点
watcher机制
介绍下几种机制
微服务治理最需要做到 感知服务上下线 负载均衡
- 允许宕机 临时节点 (与客户端会话同生命期限) 服务宕机 或者 下线 就会删除这个节点 符合现实场景
- 因为是类似分布式文件的系统 每一个目录下只允许有一个同名的文件节点
排他性 分布式锁保证 - 持久化节点 会有一些节点 比如service接口提供节点 会持久化在磁盘
- 主从机制依附于 zookeeper中的有序临时节点
有序节点 创建节点后面增加一个递增的序列 这个序列在同一级的父节点之下也是唯一的
当有序的序列 前面节点删除了 下面节点监听在同一序列下比他小的节点 发现删除 再次争夺主从 - 动态监控 watcher zookeeper提供订阅znode的功能 getData() getChildern() exits()
监听、注册当前结点子节点的状态 如果增加 修改 删除 了 那就进行一个同步的更新
如果发现不再变化了 就是收不到这个node的消息了 客户端可以在收到事件同步之后 回调一个注册事件的消息
融合springcloud 一体化的dubbo (RPC+服务治理)框架
和dubbo+zookeeper几乎一样 唯一区别就是配置文件上关于zookeeper的前面标识有些区别spring.cloud.zookeerper.connect-string
而且可以配置是否订阅zookeeper
spring.cloud.zookeerper.discovery.register=trew/false