在介绍dubbo之前首先了解一下SOA架构和RPC。
SOA架构
SOA(Service Oriented Ambiguity)架构是一种面向服务的架构,它把项目的功能独立出来便于其他单元或是用户的调用,便于项目的设计,能让开发更有效率。
例如,通常,分布式项目中不允许每个项目都能访问数据库,因此,把数据访问独立出一个服务,让其他单元可以调用这个服务,这样可以提高安全性和代码复用。
RPC
RPC(Remote Procedure Call Protocol)名为远程过程调用协议,客户端(A)通过互联网调用远程服务器,不知道远程服务器具体实现,只知道远程服务器提供了什么功能,RPC的存在极大提高了数据安全性。
Dubbo
一个分布式、高性能的RPC服务框架。
导入jar包
说明:在父级项目中引入dubbo的jar包文件(在后台项目的主配置项目pom文件中)
<!--引入dubbojar包文件 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
编辑中立的接口项目interface
1).接口项目创建过程(实际项目中可写在common中)
2.定义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