安装与测试
安装
- 首先下载Zookeeper安装包,安装包里面linux和window的程序都有
- zookeeper3.5后
tar.gz是未编译后的包,3.5后还下tar.gz就会报找不到主类,需要下bin.tar.gz才是编译后的包
- zookeeper3.5后
- 解压后进入,进行第三步后,再回这一步,运行
/bin/zkServer.cmd- 第一次运行可能会报错:读不到
zoo.cfg,配置了第三步就没事了 - 还可能遇到闪退,可以尝试:
编辑zkServer.cmd文件末尾添加pause添加后为pause endlocal
- 第一次运行可能会报错:读不到
- 修改
zoo.cfg配置文件,这个就是第一步报错类找不到的原因
- 进入
bin里面使用zkCli.cmd进行测试 ```powershell 执行zkCli.cmd,进入zk模式后,再执行如下操作
ls / #列出zookeeper根下保存的所有节点 第一次时正常结果应该是(默认有一个节点):[zookeeper]
create -e /rzd 123 #在根节点下创建一个名为rzd的节点,值为123 创建成功返回Created
get /rzd #获取节点值
<a name="WfLcZ"></a>
# Dubbo
- **Dubbo开始是alibba做的,现在开源了,成为了apache的顶级项目。**
- Dubbo是一个**轻量级,高性能**的RPC框架。提供了三大核心能力:**面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。**
- dubbo就是一个jar包,**能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。**
- 所以dubbo使用前,首先需要安装有Zookeeper环境。
<a name="GMrUx"></a>
## Dubbo-admin
- 这是个可视化监听dubbo服务的监控程序,不装也不影响使用dubbo
- 略
<a name="UnPiy"></a>
# 第一个springboot+Dubbo+Zookeeper
<a name="YTB8n"></a>
## 项目创建并创建一个服务
- 首先启动`Zookeeper`服务。idea创建个空的springboot项目,实现个服务提供者。**这里我们简单讲下Zookeeper和Dubbo使用,所以服务提供者和消费者都写一个模块里**
```java
package com.kuang.provider.service;
public interface TicketService { //卖票服务
public String getTicket();
}
//------------
package com.kuang.provider.service;
public class TicketServiceImpl implements TicketService {
@Override
public String getTicket() {
return "《狂神说Java》";
}
}
package com.kuang.consumer.service;
public class UserService {
//我们需要去拿去注册中心的服务
}
服务提供者
引入依赖
- 需要将服务提供者注册到注册中心,这借助Dubbo与Zookeeper。我们需要导入包
- 最新的zookeeper及其依赖包可能会导致日志冲突,可以通过剔除zookeeper里的日志依赖解决
```java
org.apache.dubbo dubbo-spring-boot-starter 2.7.3
<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>
<a name="UDzFd"></a>
### 配置
```properties
#当前应用的名字
dubbo.application.name=provider-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#扫描指定包下服务
dubbo.scan.base-packages=com.kuang.provider.service
服务类注册
- 如果服务接口和服务实现是2个模块。注意是远程服务的提供者的实现类所在模块需要注册,远程服务接口所在不需要配置注册(即配置服务发现)
- 在service的实现类中配置服务注解,发布服务!注意导包问题。
- 这里和feign是类似的,也是编写接口配置远程调用的接口
- 应用启动起来,dubbo就会扫描配置的指定的包下的:带有@component注解的服务,将它发布在指定的注册中心中! ```java import org.apache.dubbo.config.annotation.Service; import org.springframework.stereotype.Component;
@Service //将服务发布出去 @Component //放在容器中 public class TicketServiceImpl implements TicketService { @Override public String getTicket() { return “《狂神说Java》”; } }
<a name="MzAm0"></a>
## 消费服务
<a name="Erzny"></a>
### 依赖 & 配置
- 消费服务模块的依赖同服务提供者的依赖一样,配置也差不多,就是不需要配置服务扫描包
```properties
#当前应用名字
dubbo.application.name=consumer-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
消费类
package com.kuang.consumer.service;
import com.kuang.provider.service.TicketService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
@Service //注入到容器中
public class UserService {
@Reference //远程引用指定的服务,他会按照全类名进行匹配,看谁给注册中心注册了这个全类名
TicketService ticketService;
public void bugTicket(){
String ticket = ticketService.getTicket();
System.out.println("在注册中心买到"+ticket);
}
}
测试
- 直接注入消费类,调用消费服务,服务提供者的调用让消费类自己内部进行
