dubbo+zookeeper初体验

本文详细介绍RPC概念,Dubbo框架特性和Zookeeper服务功能,涵盖安装配置、服务注册与发现,以及SpringBoot项目中服务提供者与消费者的实现。

1. 什么是RPC?

RPC(即Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。用来满足分布式系统架构中不同的系统之间的远程通信和相互调用

2. 什么是Dubbo?

Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 详情请参考 dubbo中文官网
在这里插入图片描述

3. 什么是zookeeper?

zooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

4. 安装zookeeper

(1)进入官网下载 ,我们下载3.4.14版本的 zookeeper下载
在这里插入图片描述
(2)将zoo_sample.cfg 更名为 zoo.cfg 得到一个新的文件
在这里插入图片描述
(3)开启zookeeper ,双击bin目录下的zkServer.cmd
在这里插入图片描述
双击之后的效果图: 表示开启成功。
在这里插入图片描述

5. 安装dubbo-admin ,监控服务

(1)进入github下载 , 我们下载develop分支,这是最新的分支,采用前后端分离的结构。 dubbo-admin 下载
在这里插入图片描述
(2) 使用idea打开后台dubbo-admin-server,并运行
在这里插入图片描述
(3)使用vscode打开前台dubbo-admin-ui
在这里插入图片描述
(4)再控制台运行前台dubbo-admin-ui

先后执行下面的命令:

  1. npm install
  2. npm run dev

(5)运行成功之后,得到如下界面

初始账号:root
初始密码:root
在这里插入图片描述

6. 使用dubbo和zookeeper

6.1 编写服务提供者

(1)新建springboot项目provider-server ,作为服务提供者
(2)pom.xml文件引入dubbo和zookeeper

<!--dubbo-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>

        <!--zkclient===>zookeeper-->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

        <!--日志会冲突-->
        <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)配置application.properties文件

server.port=8001

#服务应用的名字
dubbo.application.name=provider-server

#注册中心
dubbo.registry.address=zookeeper://127.0.0.1:2181

#哪些服务要被注册
dubbo.scan.base-packages=com.example.service

(4)编写服务

  1. 先编写接口TicketService
public interface TicketService {
    String getTicketInfo();
}
  1. 先编写接口的实现类TicketServiceImpl
import com.example.service.TicketService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

//zookeeper服务注册与发现
@Service	//此处的Service引入的是dubbo中的,而不是springMvc中的
@Component  
public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicketInfo() {
        return "票的信息";
    }
}

6.2 编写服务消费者

(1)新建springboot项目consumer-server ,作为服务消费者
(2)pom.xml文件引入dubbo和zookeeper

<!--dubbo-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>

        <!--zkclient===>zookeeper-->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

        <!--日志会冲突-->
        <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)配置application.properties文件

server.port=8002

#消费者去哪里拿服务,需要暴露自己的名字
dubbo.application.name=consumer-server

#注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181

(4)使用服务

消费者需要使用提供者提供的服务,需要再相同目录下面新建一个相同的接口。

  1. 复制提供者的接口到消费者相同目录的位置
public interface TicketService {
    String getTicketInfo();
}
  1. 消费者使用服务
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;

@Service       //放到容器中,此处的Server为springMvc的
public class UserService {
    //获取provider-server提供的票信息,去注册中心拿
    @Reference      //引用   1.pom坐标  2.定义路径相同的接口名
    TicketService ticketService;
    
    public void buyTicket(){
        String ticket = ticketService.getTicketInfo();
        System.out.println(ticket);
    }
}
  1. 在consumer-server编写测试方法
@SpringBootTest
class ConsumerServerApplicationTests {

    @Autowired
    UserService userService;

    @Test
    void contextLoads() {
        userService.buyTicket();
    }
}
  1. 运行项目provider-server,并运行consumer-server测试方法,最终得到提供者输出的内容。
    在这里插入图片描述

7. 查看监控界面

可以很清楚的看到,服务成功注册。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值