Zookeeper
简介
ZooKeeper是一个集中的服务,主要用于配置信息的维护、命名、分布式同步和组服务。所有这些类型的服务都以某种形式被分布式应用程序使用。每次实现它们时,都要做大量的工作来修复不可避免的bug和竞争条件。由于实现这类服务的困难,应用程序最初通常会对它们进行节省,这使得它们在出现更改时变得脆弱,并且难以管理。即使正确执行,这些服务的不同实现在部署应用程序时也会导致管理的复杂性。
windows下安装Zookeeper
- 下载网址:archive.apache.org/dist/zookee…
- 我们选择3.6.3的版本,因为官网说它是最稳定的版本
3. 下载完解压,直接双击运行一下bin目录下的zkServer.cmd
,你会发现闪退。 4. 这时候,你就编辑一下zkServer.cmd
- 编辑完运行,你会发现另外一个错误
- 这时候,我们要去conf目录,复制一份
zoo_sample.cfg
文件,改名为zoo.cfg
,再运行,又可能发生一个错误,端口号被占用,就离谱。
7. 别怕,这时候,我们只要在zoo.cfg
文件最后加上admin.serverPort=没有被占用的端口号
,如admin.serverPort=8001
,这时候再启动,就没问题了。
我们再在bin目录启动zkCli.cmd来测试
- ls / : 列出zookeeper根下保存的所有节点
- create –e /example 111:创建一个kuangshen节点,值为123
- get /example:获取/example节点的值
Dubbo
一个重要的图:
其中:
服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者(Consumer):调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
执行流程:
- 服务容器负责启动,加载,运行服务提供者。
- 服务提供者在启动时,向注册中心注册自己提供的服务。
- 服务消费者在启动时,向注册中心订阅自己所需的服务。
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
window下安装dubbo-admin
- 下载
dubbo-admin
:github.com/apache/dubb… - 下载完解压,解压后在项目目录下通过
mvn clean package -Dmaven.test.skip=true
打包dubbo-admin
3. 打包完了之后,打开zookeeper的服务! 执行 dubbo-admin\target 下的dubbo-admin-0.0.1-SNAPSHOT.jar
4. 执行后访问:http://localhost:7001/ ,需要登录,用户名和密码默认都是root
SpringBoot + Dubbo + zookeeper 三个整合
比如说,买票和卖票的服务
框架搭建
- 启动zookeeper !
- IDEA创建一个空项目
- 创建两个模块,provider实现服务提供者,consumer实现服务消费者,两个模块均只需导入web依赖就行
- 项目创建完毕,在两个模块导入依赖
这里可能是因为新版本的坑,我们需要自己把项目的java目录标记为源根,resouerce标记为资源根,并把spring-boot-starter-parent的版本将为2.2.1.RELEASE
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!--【新版的坑】zookeeper及其依赖包,解决日志冲突,还需要剔除日志依赖;-->
<!-- 引入zookeeper -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</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.4.14</version>
<!--排除这个slf4j-log4j12-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
- 我们在
provider
模块写一个卖票服务
package com.example.service;
public interface TicketService {
public String getTicket();
}
- 我们在
provider
模块写一个卖票服务的实现类
package com.example.service;
@DubboService
public class TicketServiceImpl implements TicketService{
@Override
public String getTicket() {
return "这是一张票";
}
}
- 我们在
consumer
模块写一个用户的服务
import org.springframework.stereotype.Service;
@Service//让spring托管
public class UserService {
@DubboReference//引用远程的对象
TicketService ticketService;
public void buyTicket(){
String ticket =ticketService.getTicket();
System.out.println("在注册中心买到"+ticket);
}
}
- 配置application.properpites
server.port=8001
# 这个服务的端口号
dubbo.application.name=provider-server
#名字
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 再这个网址(zookeeper)注册,
dubbo.scan.base-packages=com.boot.service
# 扫描这个包,有@DubboService的,将其注册进zookeeper
- 编写测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class ConsumerServerApplicationTests {
@Autowired
UserService userService;
@Test
public void contextLoads() {
userService.bugTicket();
}
}
- 这个项目,用了最新版的Zookeeper,好像出了点小问题,有疑问可以去观看视频
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/16096.html