SpringBoot框架学习(十三)——分布式简介

十七、SpringBoot与分布式

demo地址:https://github.com/2NaCl/dubbo-demo

Dubbo与Zookeeper:

1.分布式应用

在分布式系统中,国内常用zookeeper+dubbo组合,而Spring Boot推荐使用全栈的Spring,Spring Boot+Spring Cloud。
在这里插入图片描述

2.Zookeeper和Dubbo

  • Zookeeper
    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

  • Dubbo
    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。
    在这里插入图片描述

3.搭建环境(Docker)

  • Zookeeper
[root@localhost ~]# docker search zookeeper
INDEX       NAME                                                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/zookeeper                                 Apache ZooKeeper is an open-source server ...   614       [OK]       
docker.io   docker.io/jplock/zookeeper                          Builds a docker image for Zookeeper versio...   162                  [OK]
docker.io   docker.io/wurstmeister/zookeeper                                                                    76                   [OK]
docker.io   docker.io/mesoscloud/zookeeper                      ZooKeeper                                       73                   [OK]
docker.io   docker.io/confluentinc/cp-zookeeper                 Official Confluent Docker Image for Zookeeper   44                   
docker.io   docker.io/mbabineau/zookeeper-exhibitor                                                             24                   [OK]
docker.io   docker.io/digitalwonderland/zookeeper               Latest Zookeeper - clusterable                  19                   [OK]
docker.io   docker.io/confluent/zookeeper                                                                       13                   [OK]
docker.io   docker.io/hyperledger/fabric-zookeeper              Fabric Zookeeper docker image for Hyperled...   13                   
docker.io   docker.io/bitnami/zookeeper                         ZooKeeper is a centralized service for dis...   12                   [OK]
docker.io   docker.io/debezium/zookeeper                        Zookeeper image required when running the ...   8                    [OK]
docker.io   docker.io/31z4/zookeeper                            Dockerized Apache Zookeeper.                    6                    [OK]
docker.io   docker.io/springxd/zookeeper                        A Docker image that can run a ZooKeeper se...   6                    [OK]
docker.io   docker.io/thefactory/zookeeper-exhibitor            Exhibitor-managed ZooKeeper with S3 backup...   5                    [OK]
docker.io   docker.io/eventuateio/eventuateio-local-zookeeper   Zookeeper suitable for dev/test                 2                    [OK]
docker.io   docker.io/duffqiu/zookeeper-cli                                                                     1                    [OK]
docker.io   docker.io/emccorp/zookeeper                         Zookeeper                                       1                    
docker.io   docker.io/openshift/zookeeper-346-fedora20          ZooKeeper 3.4.6 with replication support        1                    
docker.io   docker.io/paulbrown/zookeeper                       Zookeeper on Kubernetes (PetSet)                1                    [OK]
docker.io   docker.io/avvo/zookeeper                            Apache Zookeeper                                0                    [OK]
docker.io   docker.io/jamiecressey89/marathon-zookeeper         Zookeeper image that uses Marathon's API f...   0                    [OK]
docker.io   docker.io/josdotso/zookeeper-exporter               ref: https://github.com/carlpett/zookeeper...   0                    [OK]
docker.io   docker.io/midonet/zookeeper                         Dockerfile for a Zookeeper server.              0                    [OK]
docker.io   docker.io/phenompeople/zookeeper                    Apache ZooKeeper is an open-source server ...   0                    [OK]
docker.io   docker.io/strimzi/zookeeper                                                                         0                    


[root@localhost ~]# docker pull docker.io/zookeeper
Using default tag: latest
Trying to pull repository docker.io/library/zookeeper ... 
latest: Pulling from docker.io/library/zookeeper
8e402f1a9c57: Pull complete 
4866c822999c: Pull complete 
cf419f3f41ff: Pull complete 
88430b15d43f: Pull complete 
d5a9723280f1: Pull complete 
c43110341cd8: Pull complete 
9ec9c92edf13: Pull complete 
cdf8329cd90a: Pull complete 
Digest: sha256:8832a49f7ee6399c608e9a666e294adeaef0e4b1bc540c60ac75b8ec4b41f572
Status: Downloaded newer image for docker.io/zookeeper:latest


[root@localhost ~]# docker images
REPOSITORY                                     TAG                 IMAGE ID            CREATED             SIZE
docker.io/rabbitmq                             3-management        20c898989d5c        4 days ago          213 MB
docker.io/tomcat                               latest              02eaee4dc65c        6 days ago          463 MB
docker.io/zookeeper                            latest              4ebfb9474e72        6 days ago          150 MB
docker.io/redis                                latest              a55fbf438dfd        7 days ago          95 MB
docker.io/mysql                                latest              7bb2586065cd        7 days ago          477 MB
registry.docker-cn.com/library/elasticsearch   latest              5acf0e8da90b        6 months ago        486 MB
registry.docker-cn.com/library/elasticsearch   2.4.6               5e9d896dc62c        6 months ago        479 MB


[root@localhost ~]# docker run --name zk01 -p 2181:2181 --restart always -d 4ebfb9474e72
2b423b6cf6f11d128cf8f2de66c46066982e7d255550573cd2bc6f85a804ec2f


[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                        NAMES
2b423b6cf6f1        4ebfb9474e72        "/docker-entrypoin..."   4 seconds ago       Up 2 seconds        2888/tcp, 0.0.0.0:2181->2181/tcp, 3888/tcp   zk01
  • Dubbo
    在这里插入图片描述
    然后依次创建项目,为了实现Dubbo的中间件效果,所以我们创建两个Module,接下来我们将会在client端调用到Server端的方法。
    在这里插入图片描述

4.实现Dubbo的RPC服务

<1>配置服务端的dubbo与zk的依赖并注册地址

首先配置好服务端dubbo的maven环境

<!-- https://mvnrepository.com/artifact/com.alibaba.boot/dubbo-spring-boot-starter -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.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>

然后再properties文件中对我们两个Module的连接进行基本的配置

server.port=8781
dubbo.application.name=dubbo-Server
dubbo.registry.address=zookeeper://192.168.243.30:2181
dubbo.scan.base-packages=springboot.dubbo.service

<2>使用@Service发布服务

@Component
@Service
public class TicketServiceImpl implements ticketServer{

    @Override
    public String getTicker() {
        return "《SBZZ》";
    }
}

然后按照我们上面写的发布地址将服务发布出去。

<3>配置客户端的dubbo和zk依赖并注册地址

也是先导入dubbo和zk的相关依赖

<!-- https://mvnrepository.com/artifact/com.alibaba.boot/dubbo-spring-boot-starter -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

然后进行注册

server.port=8782

dubbo.application.name=dubbo-client

dubbo.registry.address=zookeeper://192.168.243.30:2181

<4>将服务端的接口复制到客户端

在这里插入图片描述
在这里插入图片描述
然后直接调用复制过来的接口。

@Service
public class UserService {
    @Reference
    ticketServer ticketServer;
}

然后写一个测试程序
一定要将之前服务端的程序一直启动,不然会报错

@RunWith(SpringRunner.class)
@SpringBootTest
public class DubboClientApplicationTests {

    @Autowired
    UserService userService;

    @Test
    public void contextLoads() {
        userService.hello();
    }

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值