duboo+zookeeper分布式架构入门

分布式 dubbo + Zookeeper

分布式系统就是若干独立计算机的集合(并且这些计算机之间相互有关联,就像是一台计算机中的C盘F盘等),这些计算对于用户来说就是一个独立的系统。

zookeeper安装

下载地址:Index of /dist/zookeeper/zookeeper-3.4.14 (apache.org)

这里选择3.4.14版本安装

下载完成得到一个压缩包,解压到我们安装的位置,打开解压之后的文件夹中的conf目录,把zoo_sample.cfg这个文件复制一份副本,将副本改名为zoo.cfg任何返回上一级目录,打开bin运行服务端zkServer.cmd,等待服务端运行成功之后运行客户端zkCli.cmd,服务端运行成功可以看见这一段信息 - INFO [main:NIOServerCnxnFactory@89] - binding to port 0.0.0.0/0.0.0.0:2181,客户端运行成功看到WATCHER::WatchedEvent state:SyncConnected type:None path:null之后回车会显示[zk: localhost:2181(CONNECTED) 0]表示安装成功

安装dubbo-admin

dubbo-admin是一个监控管理后台,可以查看我们注册了哪些服务和查看哪些服务被消费了

github下载地址:apache/dubbo-admin at master (github.com)

下载之后是源码,这是一个maven项目,我们可以打包之后使用。进入文件夹dubbo-admin-master,执行打包命令

mvn clean package -Dmaven.test.skip=true等待cmd显示build success。打包成功之后开启zookeeper服务端后,进入dubbo-admin-master中的dubbo-admin-service目录,进入target文件夹cmd执行jar包。执行成功之后浏览器输入localhost:8080可以进入dubbo-admin的ui界面。初始密码和初始账号是root

测试分布式架构

新建两个springboot项目模块,一个服务提供商,一个使用者都导入dubbo和zookeeper依赖

<!-- https://mvnrepository.com/artifact/org.apache.dubbo/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和springboot会有日志冲突需要排除一个日志的jar包;并且zookeeper需要依赖其他的jar包才能够正常运行-->
<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>
    <!--这里写排除包-->
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

服务提供商配置

server:
  port: 8001

# 当前服务应用的名字
dubbo:
  application:
    name: provider-server
#  注册中心地址
  registry:
    address: zookeeper://127.0.0.1:2181
# 配置需要被注册的服务的包地址
  scan:
    base-packages: com.zhong.service

这里可能会存在一个问题就是20880端口被占用了,于是项目于启动失败。如果出现这个问题就修改dubbo端口

# 修改端口为20881
dubbo:
  protocol:
    name: dubbo
    port: 20881

服务端测试

package com.zhong.service;


import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

@Service //因为dubbo的@service注解和springboot的注解名字一样,不容易区分,特别要注意导入的包名
@Component //或者使用组件注解@Component
//使用了注解以后,会自动的注册服务到服务中心(zookeeper)
public class TicketServiceImpl implements TicketService {


    @Override
    public String getTicket() {
        return "hello";
    }
}

测试服务注册,首先开启zookeeper,然后开启dubbo-admin,再开启项目。正常启动应该能够看到这两个服务被注册

在这里插入图片描述

用户配置

server:
  port: 8002
dubbo:
#  暴露消费者名字
  application:
    name: consumer-server
#    配置注册中心地址
  registry:
    address: zookeeper://127.0.0.1:2181

用户端这里有两种方式调用远程的接口,一是使用POM坐标(实际开发常用),二是使用新建一个相同的路径名的接口。

package com.zhong.service;

import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;

@Service//注意用户端这里的服务需要注入到容器中调用,所以这里是springboot的注解
public class UserService {
    
    @Reference//这里是指注入远程的接口,必须新建一个与远程接口包路径相同的接口来接收
    private TicketService ticketService;
    
    public void getTicket() {
        String ticket = ticketService.getTicket();
        System.out.println(ticket);
    }
    
}

之后从容器中拿到注入的本地对象直接调用就可以了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值