1 ZooKeeper安装使用[windows单机版本]
1 下载地址:版本为3.4.14
2 解压到本地文件夹中
3将conf目录下的zoo_sample.cfg文件,复制一份,重命名为zoo.cfg
4 修改zoo.cfg配置文件,将dataDir=/tmp/zookeeper修改成zookeeper安装目录所在的data文件夹(需要在安装目录下面新建一个空的data文件夹和log文件夹),再添加一条添加数据日志的配置,如下图
5 启动:
启动zookeeper,判定是否安装成功,双击运行bin目录下的zkServer.cmd文件即可
双击zkCli.cmd
OK !
还可以配置环境变量:
ZOOKEEPER_HOME:E:\zkeeper\zookeeper-3.4.14
Path:%ZOOKEEPER_HOME%\bin
2 ZooKeeper安装使用[linux 伪集群]
1 在 linux 跟目录"/"新建opt1文件夹
2 把压缩文件上传到opt1文件夹,解压并重新命名为zookeeper1
3 进入zookeeper1 新建子目录data和logs
4修改zookeeper1/conf/zoo.cfg文件
dataDir=/opt1/zookeeper1/data
dataLogDir=/opt1/zookeeper1/logs
#------------端口------------
clientPort=2181
同时添加伪集群
#------------集群服务器------------
#server.id=host:port1:port2 后面2个端口 分别代表follow服务器端口、leader服务器端口
server.1=127.0.0.1:1100:1200
server.2=127.0.0.1:2100:2200
server.3=127.0.0.1:3100:3200
5 设置服务器ID
在zookeeper1/data/ 目录下,新建myid文件,插入值1(服务器id)
6 复制zookeeper1多份,为了伪集群服务,并命名zookeeper2、zookeeper3…
修改zookeeper2和zookeeper3的 /conf/zoo.cfg分别为:
#------------日志目录------------
#dataDir=/tmp/zookeeper
dataDir=/opt1/zookeeper2/data
#日志位置
dataLogDir=/opt1/zookeeper2/logs
#------------端口------------
clientPort=2182
#------------集群服务器------------
#server.id=host:port1:port2 后面2个端口 分别代表follow服务器端口、leader服务器端口
server.1=127.0.0.1:1100:1200
server.2=127.0.0.1:2100:2200
server.3=127.0.0.1:3100:3200
#------------日志目录------------
#dataDir=/tmp/zookeeper
dataDir=/opt1/zookeeper3/data
#日志位置
dataLogDir=/opt1/zookeeper3/logs
#------------端口------------
clientPort=2183
#------------集群服务器------------
#server.id=host:port1:port2 后面2个端口 分别代表follow服务器端口、leader服务器端口
server.1=127.0.0.1:1100:1200
server.2=127.0.0.1:2100:2200
server.3=127.0.0.1:3100:3200
7 并分别修改文件 zookeeper2/data/myid 和zookeeper3/data/myid,分别修改数据为 2、3
8 启动集群
进入到zookeeper1/bin目录下 执行 zkServer.sh start
进入到zookeeper2/bin目录下 执行 zkServer.sh start
进入到zookeeper3/bin目录下 执行 zkServer.sh start
linux环境下,启动命名为[./zkServer.sh start]
9 查看状态
zkServer.sh start 启动
zkServer.sh status 查看状态
zkServer.sh stop 停止/关闭
10 使用3台服务器进行搭建
至于使用3台服务器进行搭建的话,只是zoo.cfg文件中3台服务器端口都是2181
集群服务器设置如下:
#------------集群服务器------------
#server.id=host:port1:port2 后面2个端口 分别代表follow服务器端口、leader服务器端口
server.1=192.168.0.113:1100:1200
server.2=192.168.0.123:1100:1200
server.3=192.168.0.133:1100:1200
4 Dubbo安装使用
window下安装dubbo-admin
dubbo本身并不是一个服务软件。它其实就是一个jar包,能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。
但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序dubbo-admin,不过这个监控即使不装也不影响使用。
我们这里来安装一下:
- 下载dubbo-admin
地址:https://github.com/apache/dubbo-admin/tree/master
2、解压进入目录
修改 dubbo-admin\src\main\resources \application.properties 指定zookeeper地址
server.port=7001
spring.velocity.cache=false
spring.velocity.charset=UTF-8
spring.velocity.layout-url=/templates/default.vm
spring.messages.fallback-to-system-locale=false
spring.messages.basename=i18n/message
spring.root.password=root
spring.guest.password=guest
dubbo.registry.address=zookeeper://127.0.0.1:2181
3.在项目目录下打包dubbo-admin
mvn clean package -Dmaven.test.skip=true
第一次打包的过程有点慢,需要耐心等待!直到成功!
4. 执行 dubbo-admin\target 下的dubbo-admin-0.0.1-SNAPSHOT.jar
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
【注意:zookeeper的服务一定要打开!】
执行完毕,我们去访问一下 http://localhost:7001/ , 这时候我们需要输入登录账户和密码,我们都是默认的root-root;
登录成功后,查看界面
3 案例使用
1 创建父项目为maven项目
略
2 创建子模块1为springboot项目[提供者]
1 创建provider-server的项目
2 导入依赖
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!--zkclient-->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!-- 引入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>
3 创建提供者接口 和实现类
public interface TickerService {
String getTicket();
}
@Service //这个是dubbo的service注解不是spring的,加了这个注解在项目启动后就自动注册到注册中心zookeeper中
@Component //这个在spring中注册,由spring管理的组件,不用Service是因为为了避免与dubbo的service冲突(而忘了import)
public class TickerServiceImpl implements TickerService {
@Override
public String getTicket() {
return "getTicket success!";
}
}
4 配置application.properties
server.port=8001
#当前应用名字
dubbo.application.name=provider-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#扫描指定包下服务
#dubbo.scan.base-packages=com.provideserver.service
dubbo.protocol.port=20880
dubbo.protocol.name=dubbo
5 provider集群启动
修改application.properties
思路:
- 修改server.port=8088
- 修改dubbo协议端口dubbo.protocol.port=20881
- 添加消费者负载均衡策略,此处使用轮询策略dubbo.consumer.loadbalance=roundrobin
server.port=8010
#应用名字
dubbo.application.name=provider-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#扫描指定包下服务 使用@EnableDubbo代替
#dubbo.scan.base-packages=com.qidian.provideserver.service
##协议端口
dubbo.protocol.port=20881
##协议名称
dubbo.protocol.name=dubbo
在启动类添加注解:@EnableDubbo
3 创建子模块2为springboot项目[消费者]
1 创建consumer-server的项目
2 导入依赖
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!--zkclient-->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!-- 引入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>
3 创建消费者 实现类,准备调用提供者的接口服务
@Service // spring容器管理
public class UserService {
//拿到远程的provider-server提供的服务
@Reference //dubbo的注解用于 调用提供者 直接引用,会导入提供者的依赖到消费者里面
private TickerService tickerService;
public void buyTicket(){
String ticket = tickerService.getTicket();
System.out.println("在注册中心拿到:"+ticket);
}
}
4 配置消费者application.properties
server.port=8002
#当前应用名字
dubbo.application.name=consumer-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
在启动类添加注解:@EnableDubbo
先启动Windows下的zookeeper, dubbo-admin
开始测试
启动两个服务
在消费者进行单元测试:
@SpringBootTest
class ConsumerServerApplicationTests {
@Autowired
UserService userService;
@Test
void contextLoads() throws InterruptedException {
for (int i =0;i<10;i++){
userService.buyTicket();
}
}
}
结果如下:
在注册中心拿到:getTicket success!
在注册中心拿到:getTicket success!
在注册中心拿到:getTicket success!
在注册中心拿到:getTicket success!
在注册中心拿到:getTicket success!
在注册中心拿到:getTicket success!
在注册中心拿到:getTicket success!
在注册中心拿到:getTicket success!
在注册中心拿到:getTicket success!
在注册中心拿到:getTicket success!