下载地址:Index of /apache/zookeeper/zookeeper-3.6.3 (bfsu.edu.cn)
上传到opt/zookeeper目录
- # 1
- cd /opt
- # 2 创建目录
- mkdir zookeeper
- # 3 解压
- tar -zxvf xxxx
- # 4
- cd apache-zookeeper-3.6.3-bin/
- # 5 配置
- cd conf
- # 6 复制文件 zoo.cfg 才能生效
- cp zoo_sample.cfg zoo.cfg
- # 7 更改目录配置
- vim zoo.cfg

- # 8 退出保存
- esc + wq!
- # 9 创建刚刚那个目录用于保存数据
- mkdir /opt/zookeeper/zkdata
- # 10 进入bin目录
- cd /opt/zookeeper/apache-zookeeper-3.6.3-bin/bin
- # 11 启动
- ./zkServer.sh start
- # 12 停止
- ./zkServer.sh stop
- # 13 查看状态
- ./zkServer.sh status
-
启动完成记得放行2181 8222 8333端口,如果放行端口后依旧报错使用firewalld-cmd reload 重刷防火墙规则
父模块
导入依赖

- <parent>
- <artifactId>spring-boot-starter-parentartifactId>
- <groupId>org.springframework.bootgroupId>
- <version>2.2.1.RELEASEversion>
- parent>
-
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.apache.dubbogroupId>
- <artifactId>dubbo-spring-boot-starterartifactId>
- <version>2.7.3version>
- dependency>
- dependencies>
- dependencyManagement>
api接口模块
创建一个普通service测试接口
public interface HelloService {
void sayHello(String name);
}
提供者模块
依赖以及配置
- <dependency>
-
- <groupId>org.examplegroupId>
- <artifactId>dubbo-apiartifactId>
- <version>1.0-SNAPSHOTversion>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
- <dependency>
- <groupId>org.apache.dubbogroupId>
- <artifactId>dubbo-spring-boot-starterartifactId>
- dependency>
- <dependency>
- <groupId>org.apache.curatorgroupId>
- <artifactId>curator-frameworkartifactId>
- <version>2.12.0version>
- dependency>
- <dependency>
- <groupId>org.apache.curatorgroupId>
- <artifactId>curator-recipesartifactId>
- <version>2.12.0version>
- dependency>
- server:
- port: 8081
-
- dubbo:
- application:
- name: provider
- registry:
- address: zookeeper://124.223.93.49:2181 #服务地址
- protocol:
- name: dubbo
- port: 20880
- #提供服务类实现的包
- scan:
- base-packages: com.dubbo.provider.service #扫包
消费者模块和生产者一致 但是不用配置扫包
3.编写提供者提供服务的实现以及消费者如何远程调用的
提供者
- import org.apache.dubbo.config.annotation.Service;
-
- @Service
- public class HelloServiceImp implements HelloService {
- @Override
- public void sayHello(String name) {
- System.out.println("hello+"+name+"!");
- }
- }
消费者
- import org.apache.dubbo.config.annotation.Reference;
- import org.springframework.stereotype.Service;
-
- @Service
- public class ProvideServiceImp implements ProviderService {
- @Reference
- private HelloService helloService;
- @Override
- public void providerTest() {
- helloService.sayHello("xzh");
- }
- }
效果就是调用消费者 会发现生产者确实被调用 自此学习成功。
4.dubbo的几种高级特性
定义:
升访问速度,提升用户体验
原理
使用
自动使用,无需操作。
@Service(timeout = 1000,retries = 2)
为了解决高可用,提高用户的体验,防止服务器宕机引发的雪崩效应。
原理
没有这个机制的话,当消费者调用提供者提供的服务时,如果发生阻塞,那么会一直等待,当请求越积越多,那么就会影发雪崩,造成服务器宕机。至于重试就是当连接不成功时,消费者的执行策略,如一直重试等。
使用
在@Server与@Reference注解中配置,消费者配置能够容忍的超时时间,提供者配置正常执行大致所需时间。
灰度发布
@Service(version = "1.1")
public class HelloServiceImp implements HelloService {
@Override
public void sayHello(String name) {
System.out.println("hello+"+name+"!");
}
}
拷贝一份
@Service(version = "1.2")
public class HelloServiceImp2 implements HelloService {
@Override
public void sayHello(String name) {
System.out.println("hello+"+name+"!");
}
}
@Reference(loadbalance = "random")
定义
为了控制集群中每台服务器的压力,达到合理分配请求的方式。
原理
因为集群中每台服务器配置的项目都是一样的,所有在访问的时候,如果全部请求都往一台服务器请求,那么就有可能造成服务器压力过大,造成宕机。
@Reference(cluster = "failover")
定义
在集群的前提下,当服务消费者调用提供者的服务失败的时候,消费者的执行策略。
目的
为了提高可用性以及用户的体验性。
集群容错模式
Failover Cluster
失败重试。默认值。当出现失败,重试其它服务器 ,默认重试2次,使用 retries 配置。一般用于读操作
Failfast Cluster
快速失败,只发起一次调用,失败立即报错。通常用于写操作
Failsafe Cluster
失败安全,出现异常时,直接忽略。返回一个空结果。
Failback Cluster
定义
可以通过服务降级功能临时屏蔽某个出错的非关键服务,或者屏蔽非核心服务,让服务器资源全力维持核心服务,并定义降级后的返回策略。
目的
能够控制服务器的资源分配,或者当某个服务出现紧急异常时,需要屏蔽用户发起的请求。
使用
在服务消费方的@Reference中配置使用。
两种降级配置
mock=force:return null
表示消费方对该服务的方法调用都直接返回 null 值,不发起远程调用。用来屏蔽不重要服务不可用时对调用方的影响。
mock=fail:return null
表示消费方对该服务的方法调用在失败后,再返回 null 值,不抛异常。用来容忍不重要服务不稳定时对调用方的影响。