dubbo+zookeeper+SpringBoot简单入门

dubbo+zookeeper+SpringBoot简单入门

概述

随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。

image

单一应用架构

当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。

垂直应用架构

当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。

分布式服务架构

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

流动计算架构

当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。

引用duboo官网 http://dubbo.apache.org/zh-cn/docs/user/quick-start.html

在单服务架构不能满足需求之后,我们就要考虑分布式架构了,duboo+zookeeper是一个轻量级的分布式解决方案。

本次Dome环境为

SpringBoot 2.3.1 + duboo 2.7.3 + zookeeper 3.6.1

准备工作

下载安装zookeeper

官方下载地址:https://zookeeper.apache.org/releases.html#news

配置zookeeper

解压进入apache-zookeeper-3.6.1-bin\conf,复制一份zoo_sample.cfg并改名为zoo.cfg

在这里插入图片描述

运行zookeeper会占用8080端口,修改zoo.cfg,在末尾加上

admin.serverPort=8888

在这里插入图片描述

运行zokeeper

进入apache-zookeeper-3.6.1-bin\bin直接双击zkServer.cmd运行

如果出现闪退,可能是配置有问题,用文本的方式打开zkServer.cmd,在endlocal这一行之前加上pause,再次启动以便查看错误

在这里插入图片描述

zookeeper的默认端口为:2181,如需修改在编辑conf/zoo.cfg中的 clientPort

下载编译dubbo监控

官方下载地址 https://github.com/apache/dubbo-admin

编译为jar包 mvn clean -package

运行jar包 打开cmd java -jar dubbo-admin-distribution\target\dubbo-admin-0.2.0-SNAPSHOT

duboo-admin只是用来监控服务注的,不下载这个也没有关系

监控地址:http://localhost:8080 修改端口自行百度

登录账户:root 密码:root

在这里插入图片描述

编写代码

创建项目

创建一个空项目,再添加两个SpringBoot-web module:provider-server和consumer-server

在这里插入图片描述

引入依赖

两个项目都要映入

<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>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.13.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.13.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

编写provider配置

server:
  port: 8081
dubbo:
  application:
    #服务名
    name: provider-server
  registry:
    #zookeeper注册地址
    address: zookeeper://127.0.0.1:2181
  scan:
    #配置包扫描
    base-packages: com.one.service

编写Service

在provider中编写服务提供方的方法

接口

package com.one.service;

public interface TicketService {

    String getTicket();
}

实现

package com.one.service.impl;

import com.one.service.TicketService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

/**
 * @created: 2020/6/22 9:32
 * @author: leo
 */

@Service//这个@Service是dubbo提供的
@Component//为了避免混淆,这里使用Component
public class TicketServiceImpl  implements TicketService { 

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

编写consumer配置

与provider类似 由于是消费方,不用提供服务,也就没有了包扫描

dubbo:
  application:
    name: consumer-server
  registry:
    address: zookeeper://127.0.0.1:2181
server:
  port: 8082

编写Service

这里我们需要去调用服务提供方Provider-server中TicketService的方法,需要编写一个与Provider-server中TicketService完全一样的接口,包括包名类名与方法名

接口

package com.one.service;

/**
 * @created: 2020/6/22 14:17
 * @author: leo
 */
public interface TicketService {

    String getTicket();
}

实现


import com.one.service.BuyTicket;
import com.one.service.TicketService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Component;

/**
 * @created: 2020/6/22 14:18
 * @author: leo
 */
@Component
public class BuyTicketImpl implements BuyTicket {

    @Reference //这个注解是有dubbo提供的,引用服务提供方的Service
    private TicketService ticketService;

    public void buyTicket(){
        System.out.println(this.ticketService.getTicket());
    }

}

测试

先启动provider

在consumer中编写测试类

package com.one;

import com.one.service.impl.BuyTicketImpl;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ConsumerServerApplicationTests {

    @Autowired
    BuyTicketImpl buyTicketImpl;

    @Test
    void contextLoads() {
        this.buyTicketImpl.buyTicket();
    }

}

如果能成功打印出 hello dubbo 就证明调用成功了

小结

duboo是一个典型的RPC框架,dubbo+zookeeper是一个轻量级的解决方案,容易实现,不需要太多的配置。当然,它的功能没有SpringCloud-netflix强大。

个人学习笔记,如有错误,请给予指正~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot是一个开源的Java框架,用于快速构建独立的、基于Spring的应用程序。它简化了Spring应用程序的配置和部署过程,并提供了许多嵌入式服务器,如Tomcat、Jetty等。Spring Boot还提供了自动配置的特性,可以根据类路径中的依赖自动配置Spring应用程序。 Dubbo是一款高性能的分布式服务框架,也是阿里巴巴开源的项目。它提供了服务治理、远程通讯和分布式调用等功能,帮助开发人员轻松构建分布式服务化的应用。 Zookeeper是一个开源的分布式协调服务,可以用于实现分布式应用程序的一致性和可靠性。它提供了一个类似于文件系统的层次化的命名空间,并允许开发人员注册、协调和共享各种资源,如配置信息、服务注册和发现等。 当使用Spring Boot结合DubboZookeeper时,可以构建一个高性能、可扩展和可靠的微服务架构。Spring Boot提供了便利的开发和部署方式,Dubbo提供了分布式服务框架的支持,而Zookeeper则提供了分布式协调服务。开发人员可以使用Spring Boot快速构建独立的微服务应用程序,使用Dubbo进行服务间的通信和管理,同时通过Zookeeper进行服务的注册和发现。这样的架构可以方便地实现微服务架构中的资源共享和服务治理等功能,大大简化了开发人员的负担。 综上所述,Spring Boot结合DubboZookeeper可以构建高效、可靠的微服务架构,并提供了便利的开发和部署方式,帮助开发人员构建高性能的分布式应用程序。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值