乐趣区

关于java:Dubbo简单介绍

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;
@RestController
public 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: 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 框架小常识

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:筛选以后负载小的服务器进行拜访。

退出移动版