暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Dubbo框架

程序餐厅 2020-07-24
242


Dubbo框架介绍

Apache Dubbo |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:
1.面向接口的远程方法调用,
2.智能容错和负载均衡
3.服务自动注册和发现。

Dubbo框架工作原理


组件说明:
1.消费者 负责接收用户的请求信息的. 页面
2.提供者 主要负责实现业务接口.
3.注册中心 注册中心基于心跳检测机制.可以非常灵活的检查服务是否可用.及服务自动的注册和发现功能.
4.监控 监控整合dubbo框架内部的状态信息.

注册中心工作原理(重点)

步骤:

1.当服务提供者启动时,将自己的IP地址/端口号/服务数据一起注册到注册中心中.

2.当注册中心接收提供者的数据信息之后,会维护服务列表数据.

3.当消费者启动时,会连接注册中心.

4.获取服务列表数据.之后在本地保存记录.

5.当用户需要业务操作时,消费者会根据服务列表数据,之后找到正确的IP:PORT直接利用RPC机制进行远程访问.

6.注册中心都有心跳检测机制.当发现服务器宕机/或者新增服务时.则会在第一时间更新自己的服务列表数据,并且全网广播通知所有的消费者.

安装注册中心-zookeeper

ZK下载

ZK介绍

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

ZooKeeper包含一个简单的原语集,提供Java和C的接口。

ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在$zookeeper_home\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。(概述图片来源:[1] )

总结: ZooKeeper是分布式 应用程序服务的调度器.

(安装到src目录)

集群时配置多个配置文件

每个配置的接口和路径改成对应的路径,路径文件夹需要自己创建

添加文件夹时,每个文件夹添加myid文件并编辑写明id(第一个里面就写1,第二个写2.......不可重复)

启动时依次启动


Dubbo入门案例

在父级项目中引入dubbo的jar包文件

<!--引入dubbojar包文件  -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
    </dependency>

编辑中立的接口项目interface

接口项目创建过程

定义service接口

定义服务提供者

提供者代码结构

配置userServiceImpl

编辑YML配置文件

#关于Dubbo配置   
dubbo:
scan:
basePackages: com.jt #指定dubbo的包路径
application: #应用名称
name: provider-user #一个接口对应一个服务名称
registry:
address: zookeeper://192.168.126.129:2181?backup=192.168.126.129:2182,192.168.126.129:2183
protocol: #指定协议
name: dubbo #使用dubbo协议(tcp-ip) web-controller直接调用sso-Service
    port: 20880  #每一个服务都有自己特定的端口 不能重复.

dubbo通讯原理

定义服务消费者

消费者代码结构

编辑消费者Controller

@RestController
public class UserController {

//利用dubbo的方式为接口创建代理对象 利用rpc调用

@Reference //(loadbalance="leastactive")
//@Autowired //只能注入spring家的对象
private UserService userService;

/**
* Dubbo框架调用特点:远程RPC调用就像调用自己本地服务一样简单
* @return
*/
@RequestMapping("/findAll")
public List<User> findAll(){

//远程调用时传递的对象数据必须序列化.
return userService.findAll(); //rpc调用
}

@RequestMapping("/saveUser/{name}/{age}/{sex}")
public String saveUser(User user) {

userService.saveUser(user);
return "用户入库成功!!!";
}
}

编辑消费者YML配置

server:
port: 9001
dubbo:
scan:
basePackages: com.jt
application:
name: consumer-user #定义消费者名称
registry: #注册中心地址
    address: zookeeper://192.168.126.129:2181?backup=192.168.126.129:2182,192.168.126.129:2183


Dubbo 负载均衡策略

dubbo负载均衡说明

说明:Dubbo框架对外提供了负载均衡的机制.该机制称之为客户端负载均衡. 消费者在发起请求之前.就已经清除的知道将来访问的服务器是谁.

负载均衡接口说明

hash一致性算法

说明:消费者访问绑定了指定的提供者

  //要求所有的字母全部小写
@Reference(loadbalance="consistenthash")
private UserService userService;

最小访问量

说明: 挑选当前服务器访问压力最小的服务器进行访问

//要求所有的字母全部小写
@Reference(loadbalance="leastactive")
private UserService userService;


随机算法

说明:该算法是默认的配置.

//要求所有的字母全部小写
@Reference(loadbalance="random")
private UserService userService;


轮询算法

说明:根据配置依次轮询访问.

//要求所有的字母全部小写
@Reference(loadbalance="roundrobin")
private UserService userService;


文章转载自程序餐厅,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论