一文带你走进Dubbo

1. Dubbo是什么?

Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能。
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

2. 为什么使用Dubbo

在这里插入图片描述

在这里插入图片描述

3. zookeeper和nacos区别

  1. 存储方式
    zookeeper以树形节点的方式进行存储。当有节点效性,出错以事件的方式通知消费端,nacos 以数据库进行存储,
  2. CAP方式
    Zookeeper保证CP当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。但是zk会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30 ~ 120s, 且选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。
    nacos保持了AP+CP
    nacos支持持久化和非持久化存储即有点 AP和CP 分布式一致性的概念,nacos的CP-持久化更像贴合zk的模式(过半机制),默认非持久化采用内存存储速度更快,而且分片存储,不利点就是某个服务节点挂掉,可能出现部分时间调用失败。因为服务调用本身就是实时的,持久化存储起来应该意义不大,及时变化才是真理。

4. 安装zookeeper注册中心

http://mirrors.hust.edu.cn/apache/zookeeper/
解压使用:

  1. 修改conf目录下zoo.sample.cfg 重名为zoo.cfg
  2. 启动bin目录下 zkServer.cmd
    在这里插入图片描述

5. Dubbo的流程

1.服务容器负责启动,加载,运行服务提供者。
2.服务提供者在启动时,向注册中心注册自己提供的服务。
3.服务消费者在启动时,向注册中心订阅自己所需的服务。
4.注册中心返回服务提供者地址列表给消费者,如果有变更,注册
中心将基于长连接推送变更数据给消费者。
5.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一
台提供者进行调用,如果调用失败,再选另一台调用。
6.服务消费者和提供者,在内存中累计调用次数和调用时间,定时
每分钟发送一次统计数据到监控中心。
在这里插入图片描述

6. 提供者的代码

6.1 创建一个提供者工程
在这里插入图片描述

6.2 引入相关的jar文件。

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starterparent</artifactId>
<version>2.3.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>com.ykq</groupId>
<artifactId>springboot-dubbo-common115</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starterweb</artifactId>
</dependency>
<!--引入dubbo和springboot整合的依赖 xx-springboot-starter-->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-bootstarter</artifactId>
<version>0.2.0</version>
</dependency>
<!--zookeeper的 依赖-->
<!-- 引入zookeeper,去除其中的log4j,否则会因为日
志原因导致堆栈溢出 -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
6.3 配置文件
6.4 主启动类
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4jlog4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.9</version>
</dependency>
</dependencies>

6.3 配置文件

server.port=8001
# 服务名称 spring.application.name
dubbo.application.name=springboot-dubbo-provider115
# 该提供者注册的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 使用的什么协议来访问该服务。 dubbo http ftp jdbc amqp
dubbo.protocol.name=dubbo
# 暴漏的端口号
dubbo.protocol.port=20880
# 服务端
dubbo.protocol.status=server

6.4 主启动类

@SpringBootApplication
@EnableDubbo //开启dubbo注解
public class AppProviderBeryL {
public static void main(String[] args) {
SpringApplication.run(AppProviderBeryL.class,args);
}
}

6.5 业务工程

@Service //dubbo的注解
@Component // 由spring帮你创建对象
public class ProviderServiceImpl implements
ProviderService {
@Override
public String sayHello() {
return "hello dubbo 8001";
}
}

6.6 启动
我们可以通过dubbo 提供了一个UI界面
进入解压目录
进入dubbo-admin/target目录

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

7. 消费的代码

7.1 依赖

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starterparent</artifactId>
<version>2.3.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>com.ykq</groupId>
<artifactId>springboot-dubbo-common115</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starterweb</artifactId>
</dependency>
<!--引入dubbo和springboot整合的依赖 xx-springboot-starter-->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-bootstarter</artifactId>
<version>0.2.0</version>
</dependency>
<!--zookeeper的 依赖-->
<!-- 引入zookeeper,去除其中的log4j,否则会因为日
志原因导致堆栈溢出 -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4jlog4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.9</version>
</dependency>
</dependencies>

7.2 配置文件

ubbo.application.name=springboot-dubbo-consumer115
server.port=9001
dubbo.registry.address=zookeeper://127.0.0.1:2181

7.3 主启动类

@SpringBootApplication
@EnableDubbo
public class AppConsumerBeryL {
public static void main(String[] args) {
SpringApplication.run(AppConsumerBeryL.class,args);
}
}

7.4 controller代码

@RestController
@RequestMapping("consumer")
public class ConsumerController {
@Reference(interfaceName = "springboot-dubbo-provider-BeryL")
private ProviderService providerService;
@GetMapping("show")
public String show(){
return providerService.sayHello();
}
}

7.5 测试
在这里插入图片描述
8. dubbo的负载均衡
在这里插入图片描述

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值