欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot+Dubbo+Zookeeper整合搭建简单的分布式应用

程序员文章站 2023-11-03 12:27:51
为什么要使用分布式系统? 容错 减少延迟/提高性能 可用性 负载均衡 总而言之,其实目的只有一个,”用户体验“。 什么是分布式系统? 分布式系统是由使用分发中间件连接的自治计算机组成的网络。它们有助于共享不同的资源和功能,为用户提供单一且集成的连贯网络。 搭建一个简单的分布式系统 1)在服务器(虚拟 ......

为什么要使用分布式系统?

  容错

  减少延迟/提高性能

  可用性

  负载均衡

  总而言之,其实目的只有一个,”用户体验“。

什么是分布式系统?

  分布式系统是由使用分发中间件连接的自治计算机组成的网络。它们有助于共享不同的资源和功能,为用户提供单一且集成的连贯网络。

搭建一个简单的分布式系统

  1)在服务器(虚拟机)上安装zookeeper(我这里使用docker安装)。

    (1)去docker-cn.com获取镜像加速地址

    (2)使用docker pull registry.docker-cn.com/library/zookeeper命令下载zookeeper

    (3)使用docker run --name zk01 -p 2181 --restart always -d zookeeper命令安装zookeeper

    (4)使用docker ps命令查看进程,至此zookeeper已安装完成,具体的安装文档请参照https://hub.docker.com/_/zookeeper

  2)创建服务提供者,服务消费者(我使用的开发工具是idea)。

    (1)new project 选择 empty project

    (2)创建一个子工程作为服务提供者。

        2.1  new model 选择spring initalizr为了测试方便引入web模块。

        2.2   创建一个service

package com.example.ticket.service;

public interface ticketservice {

    public string getticket();

}

          2.3  创建serviceimpl,注意引入的包

package com.example.ticket.service;

import com.alibaba.dubbo.config.annotation.service;
import org.springframework.stereotype.component;

@component
@service //将服务发布出去
public class ticketserviceimpl implements ticketservice {
    @override
    public string getticket() {
        return "《厉害了,我的国》";
    }
}

         2.4 引入dubbo和zklient相关依赖

        <!--引入dubbo-->
        <dependency>
            <groupid>com.alibaba.boot</groupid>
            <artifactid>dubbo-spring-boot-starter</artifactid>
            <version>0.1.0</version>
        </dependency>
        <!--引入zookeeper-->
        <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
        <dependency>
            <groupid>com.github.sgroschupf</groupid>
            <artifactid>zkclient</artifactid>
            <version>0.1</version>
        </dependency>

         2.5  配置dubbo的扫描包和注册中心地址

#当前应用的名称
dubbo.application.name=provider-ticket
#注册中心的地址
dubbo.registry.address=zookeeper://地址:2181
#扫描哪些包(发布什么内容)
dubbo.scan.base-packages=com.example.ticket.service

    (3)子工程作为服务消费者。

      3.1  new model 选择spring initalizr为了测试方便引入web模块。

      3.2  创建一个userservice

      3.3 引入dubbo和zklient相关依赖

        <!--引入dubbo-->
        <dependency>
            <groupid>com.alibaba.boot</groupid>
            <artifactid>dubbo-spring-boot-starter</artifactid>
            <version>0.1.0</version>
        </dependency>
        <!--引入zookeeper-->
        <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
        <dependency>
            <groupid>com.github.sgroschupf</groupid>
            <artifactid>zkclient</artifactid>
            <version>0.1</version>
        </dependency>

      3.4  配置dubbo的注册中心地址

#应用名称
dubbo.application.name=consumer-user
#注册中心的地址
dubbo.registry.address=zookeeper://地址:2181

      3.5 将所需服务提供者工程的service copy过来(一定要全类名相同),之后的目录结构如下图

SpringBoot+Dubbo+Zookeeper整合搭建简单的分布式应用

      3.6  编写userservice

package com.example.user.service;

import com.alibaba.dubbo.config.annotation.reference;
import com.example.ticket.service.ticketservice;
import org.springframework.stereotype.service;

@service
public class userservice {
    @reference
    ticketservice ticketservice;

    public void hello(){
        string ticket = ticketservice.getticket();
        system.out.println("买到票了:"+ticket);
    }

}

    至此,一个简单的分布式系统就搭建完毕。