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:挑选当前负载小的服务器进行访问。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。