Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题
为什么要用dubbo(微服务):
简单来说:随着网站日益复杂的业务。
“单体结构”:已经不能解决现有系统的业务请求,所有的业务模块在一个应用中,高流量带来的业务传输已经不能满足需求,性能差。如果一个模块产生错误,那么整个系统都不可用。
”垂直结构“:将整个系统按照模块进行垂直拆分成多个系统,每个子系统为单体结构。数据库压力减小了,但是数据表受限制了,会产生很多重复代码。
”分布式结构“: 将业务拆分,降低了耦合,负载均衡、高效的远程通信、实时监控等…
Dubbo
通过调用 Dubbo 框架提供的 API 可以获得一个服务代理(stub)对象,然后就可以像使用本地服务一样对服务方法发起调用了。 在消费端对服务方法发起调用后,Dubbo 框架负责将请求发送到部署在远端机器上的服务提供方,提供方收到请求后会调用服务的实现类,之后将处理结果返回给消费端,这样就完成了一次完整的服务调用。
简单创建SpringBoot进行使用
Dubbo依赖Zookeeper首先需要下载并启动zookeeper(Zookeeper这里不在介绍)
Zookeeper默认端口号为:2181
创建空项目,接着创建两个SpringBoot项目(服务提供者和消费者)
添加依赖,可在IDEA创建SpringBoot前勾选相关依赖Dubbo+Zookeeper
使用Dubbo
首先进行服务提供者配置
server.port=8001
#配置服务应用名称
dubbo.application.name=provider-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#哪些服务要被注册
dubbo.scan.base-packages=com.fyc.service
增加一个测试接口返回简单信息
注意:这里dubbo版本为2.7.8@Service注解为dubbo包中的注解 。3.0以前的Dubbo版本推荐使用@DubboService注解具体可在官网了解
package com.fyc.service;
import com.alibaba.dubbo.config.annotation.Service; //注意注解包
import org.springframework.stereotype.Component;
@Service //开启时自动注册服务
@Component
public class TicketServiceImp implements TicketService{
@Override
public String getTicket() {
return "服务提供者A";
}
}
消费者使用
配置消费者
server.port=8002
#配置想要拿到的服务,需要拿服务的时候暴露自己信息
dubbo.application.name=consumer-server
#注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
将自己也暴露服务中心,在服务中心拿服务提供者的服务
创建接口去消费服务
@Service //加入到spring 容器 而不是注册 的service
public class UserService {
//想要拿到提供者提供的信息接口
@Reference
TicketService service;
public String byTicket(){
String ticket = service.getTicket();
System.out.println("在注册中心拿到信息--》"+ticket);
return ticket;
}
}
测试请求
创建控制层
@RestController
public class ConsumerController {
@Autowired
UserService userService;
@GetMapping("/getInfo")
public String getInfo(){
return userService.byTicket();
}
}
消费者拿到提供者返回的信息
简单介绍dubbo-admin-master,下载文件(可在我的博客资源中下载) 启动
进入到打包好的目录 启动项目 ,端口号:7001
进入可以看到注册中心的服务 和一些配置调节