Dubbo介绍

Apache Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大外围能力:面向接口的近程办法调用,智能容错和负载平衡,以及服务主动注册和发现。

Dubbo特点

Dubbo入门案例

定义公共接口我的项目

阐明:接口我的项目个别定义公共的局部,并且被第三方依赖.

后盾服务提供者介绍

代码构造

编辑实现类

package com.jt.dubbo.service;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import com.alibaba.dubbo.config.annotation.Service;import com.jt.dubbo.mapper.UserMapper;import com.jt.dubbo.pojo.User;@Service(timeout=3000) //3秒超时 外部实现了rpc//@org.springframework.stereotype.Service//将对象交给spring容器治理public class UserServiceImpl implements UserService {   @Autowired private UserMapper userMapper;   @Override public List<User> findAll() {      System.out.println("我是第一个服务的提供者");      return userMapper.selectList(null);   }   @Override public void saveUser(User user) {      userMapper.insert(user);   }}

编辑提供者配置文件

server:  port: 9000   #定义端口spring:  datasource:    #引入druid数据源    type: com.alibaba.druid.pool.DruidDataSource    driver-class-name: com.mysql.jdbc.Driver    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true    username: root    password: root#对于Dubbo配置   dubbo:  scan:    basePackages: com.jt    #指定dubbo的包门路 扫描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  #每一个服务都有本人特定的端口 不能反复.      mybatis-plus:  type-aliases-package: com.jt.dubbo.pojo       #配置别名包门路  mapper-locations: classpath:/mybatis/mappers/*.xml  #增加mapper映射文件  configuration:    map-underscore-to-camel-case: true                #开启驼峰映射规定

前台web介绍

编辑Controller

package com.jt.dubbo.controller;import java.util.List;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import com.alibaba.dubbo.config.annotation.Reference;import com.jt.dubbo.pojo.User;import com.jt.dubbo.service.UserService;@RestControllerpublic class UserController {   //利用dubbo的形式为接口创立代理对象 利用rpc调用 //@Reference(loadbalance = "random") //random:负载平衡随机策略 //@Reference(loadbalance = "roundrobin") //roundrobin:负载平衡轮询的形式,就是一个一个拜访 //@Reference(loadbalance = "consistenthash") //consistenthash:负载平衡一致性hash算法,消费者绑定服务器提供者 @Reference(loadbalance = "leastactive") //leastactive:筛选以后负载小的服务器进行拜访。 private UserService userService;      /** * Dubbo框架调用特点:近程RPC调用就像调用本人本地服务一样简略 * @return */ @RequestMapping("/findAll")   public List<User> findAll(){      //近程调用时传递的对象数据必须序列化. return userService.findAll();   }      @RequestMapping("/saveUser/{name}/{age}/{sex}")   public String saveUser(User user) {            userService.saveUser(user);      return "用户入库胜利!!!";   }}

编辑YML配置文件

server:  port: 9001dubbo:  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框架小常识

1、如果其中一个服务器宕机,用户拜访是否受限?

因为zk的帮忙,使得程序永远能够拜访正确的服务器.并且当服务重启时,duboo本身有服务的主动发现性能,web服务器不须要重启即能够拜访新的服务.

2、如果ZK集群短时间宕机,用户拜访是否受限?

用户的拜访不受影响,因为web服务器在本地存储服务列表信息,当拜访故障机时,主动的将标识信息改为down属性.

Dubbo负载平衡策略

负载平衡品种

1.客户端负载平衡
Dubbo/SpringCloud等微服务框架

2.服务端负载平衡
客户端发动申请之后,必须由对立的服务器进行负载平衡,所有的压力都在服务器中(Nginx).

Dubbo负载平衡形式

@Reference(loadbalance = "random")
random:负载平衡随机策略
@Reference(loadbalance = "roundrobin")
roundrobin:负载平衡轮询的形式,就是一个一个拜访
@Reference(loadbalance = "consistenthash")
consistenthash:负载平衡一致性hash算法,消费者绑定服务器提供者
@Reference(loadbalance = "leastactive")
leastactive:筛选以后负载小的服务器进行拜访。