共计 4702 个字符,预计需要花费 12 分钟才能阅读完成。
1.Dubbo
1.1 Dubbo 介绍
Apache Dubbo 是一款高性能, 轻量级的开源 Java RPC 框架, 他提供了三大外围能力: 面向接口的近程办法调用, 智能容错和负载平衡, 以及服务主动注册和发现.
1.2 Dubbo 特点
2.Dubbo 入门案例
2.1 定义公共接口我的项目
阐明: 接口我的项目个别定义公共的局部, 并且被第三方依赖.
2.2 服务提供者介绍
2.2.1 提供者代码构造
2.2.2 编辑实现类
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);
}
}
2.2.3 编辑提供者配置文件
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 #开启驼峰映射规定
2.3 服务消费者介绍
2.3.1 编辑 Controller
package com.jt.dubbo.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
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
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 "用户入库胜利!!!";
}
}
2.3.2 编辑配置 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
2.3.3Dubbo 入门测试
2.4 对于 Dubbo 框架知识点
2.4.1 问题 1: 如果其中一个服务器宕机, 用户拜访受限?
因为 zk 的帮忙, 使得程序永远能够拜访正确的服务器, 并且当服务重启时,dubbo 有服务主动发现性能, 消费者不须要重启即能够拜访新的服务.
2.4.2 问题 2: 如果 ZK 集群短时间宕机, 用户拜访是否受限?
用户的拜访不受影响, 因为消费者在本地存储列表信息, 当拜访故障机时, 主动的将标识信息改为 down 属性.
2.5Dubbo 负载平衡策略
2.5.1 负载平衡品种
1. 客户端负载平衡
Dubbo/SpringCloud 等微服务框架
2. 服务端负载平衡
阐明: 客户端发动申请后, 必须由对立的服务器进行负载平衡, 所有压力都在服务器中.
NGINX
2.5.2Dubbo 负载平衡的形式
@RestController
public class UserController {
// 利用 dubbo 的形式为接口创立代理对象 利用 rpc 调用
//@Reference(loadbalance = "random") // 默认策略 负载平衡随机策略
//@Reference(loadbalance = "roundrobin") // 轮询形式
//@Reference(loadbalance = "consistenthash") // 一致性 hash 消费者绑定服务器提供者
@Reference(loadbalance = "leastactive") // 筛选以后负载小的服务器进行拜访
private UserService userService;
}
3. 京淘我的项目 Dubbo 革新
3.1 革新 JT-SSO
3.1.1 增加 jar 包文件
<!-- 引入 dubbo 配置 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
3.1.2 创立 DubboUserService 接口
3.1.3 创立提供者实现类
3.1.4 编辑提供者 YML 配置文件
server:
port: 8093
servlet:
context-path: /
spring:
datasource:
#引入 druid 数据源
#type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.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
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
#mybatis-plush 配置
mybatis-plus:
type-aliases-package: com.jt.pojo
mapper-locations: classpath:/mybatis/mappers/*.xml
configuration:
map-underscore-to-camel-case: true
logging:
level:
com.jt.mapper: debug
#对于 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 #每一个服务都有本人特定的端口 不能反复.
3.1.5 启动服务提供者
测试 Dubbo 服务器启动是否失常
3.2 革新服务消费者 JT-WEB
3.2.1 注入 Service 接口
3.2.2 编辑消费者配置文件
server:
port: 8092
spring: #定义 springmvc 视图解析器
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
dubbo:
scan:
basePackages: com.jt
application:
name: consumer-web #定义消费者名称
registry: #注册核心地址
address: zookeeper://192.168.126.129:2181?backup=192.168.126.129:2182,192.168.126.129:2183
3.1.3 启动成果测试
~~~~
正文完