
(1)理论基础
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成。
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
Provider(生产者): 暴露服务的服务提供方。
Consumer(消费者): 调用远程服务的服务消费方。
Registry(注册中心): 服务注册与发现的注册中心。dubbo推荐的是zookeeper。
1. 【解压】
dubbo-admin-develop.zip
2. 【后台配置dubbo-admin-server】
application.properties
注册中心
配置中心
元数据中心
admin.registry.address=zookeeper://127.0.0.1:2181
admin.config-center=zookeeper://127.0.0.1:2181
admin.metadata-report.address=zookeeper://127.0.0.1:2181
4. 【后台运行】
注意:Zookeeper是启动状态
实际项目中部署:Linux系统、Maven把springboot打jar包、java -jar 项目jar包。
6. 【前台dubbo-admin-ui】运行
注意:需要安装好node环境。
npm install
npm run dev
7. 【前台dubbo-admin-ui】访问
http://localhost:38082/
root/root
(2)项目应用
Zookeeper + Dubbo 案例
1.【新建2个springboot项目,对应生产者和消费者、分别为dubbo1和dubbo2】
2.【dubbo1生产者:卖票的服务】
2.1【pom.xml】
<!-- dubbo-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!-- zkclient zookeeper客户端-->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!-- 导入zookeeper需要的包和插件-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-client</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.9</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
2.2【application.properties】
# 应用名称
spring.application.name=provider-service
# 应用服务 WEB 访问端口
server.port=8081
#服务应用名称
dubbo.application.name=provider-service
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#哪些服务要被注册 会扫描这个包下的服务
dubbo.scan.base-packages=com.zhaoyang.service
2.3【接口和实现】
public interface TicketService {
public String getTicket();
}
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
@Component
@Service(version = "1.0.0",timeout = 10000,interfaceClass = TicketService.class)
public class TicketServicelmpl implements TicketService {
@Override
public String getTicket() {
return "大连-->>北京 一等座";
}
}
3.【dubbo2消费者:卖票的服务】
3.1【application.properties】
# 应用名称
spring.application.name=consumer-service
# 应用服务 WEB 访问端口
server.port=8082
dubbo.application.name=consumer-service
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.port=20880
3.2【接口和实现】
public interface TicketService {
public String getTicket();
}
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
@Service
public class UserService {
//去注册中心拿服务
@Reference(version = "1.0.0",check = true)
TicketService tickerService;
public String buyTicker(){
String ticket = tickerService.getTicket();
return "在注册中心拿到:"+ticket;
}
}
4.【测试】
【开启Zookeeper,开启Dubbo-admin,消费者调用生产者】