• 分布式架构:dubbo+zookeeper+springboot整合~~demo


    前言:

    学会此框架后让我对微服务的理解更加深刻

    本篇主要将的是dubbo+zookeeper+springboot的整合并测试,需看完我的前两篇博客《dubbo理论》和《zookeeper》才能看懂本篇文章

    环境配置

    zookeeper环境(注册中心)

    dubbo-admin:github下载,是一个监控后台,轮询的方式查看注册了那些服务,那些服务被消费了

    dubbo (jar包,也可以导入maven依赖)

    注意:在启用分布式架构项目时,应先开启zkserver(zookeeper服务)-->dubbo-admin(服务监控可视化)-》最后再运行springboot项目

    dubbo-admin安装

    可以不安装,因为它仅仅是一个监控服务的可视化

    1.下载dubbo-admin

    地址 :https://github.com/apache/dubbo-admin/tree/master

    2、解压进入目录

    修改 dubbo-adminsrcmain esources application.properties 指定zookeeper地址

    server.port=7001
    spring.velocity.cache=false
    spring.velocity.charset=UTF-8
    spring.velocity.layout-url=/templates/default.vm
    spring.messages.fallback-to-system-locale=false
    spring.messages.basename=i18n/message
    spring.root.password=root
    spring.guest.password=guest
    
    dubbo.registry.address=zookeeper://127.0.0.1:2181

    3.在项目目录下打包dubbo-admin,cmd指令(用管理员权限)

     也可以用maven或idea打成jar包

    mvn clean package -Dmaven.test.skip=true

    4.找到指定目录下的dubbo-admin.jar(用cmd指令运行)

    java -jar dubbo-admin.jar

    注意:再运行dubbo-admin前需开启zookeeper服务,

    zookeeper开启成功界面

    dubbo-admin开启成功界面

    执行完毕,我们去访问一下 http://localhost:7001/ , 这时候我们需要输入登录账户和密码,我们都是默认的root-root;

    证明dubbo-admin安装成功

    框架搭建

    新建两个springboot项目模块,用来模仿服务提供者,和服务消费者,项目进导入web即可

    1.提供者搭建配置

    导入相关依赖

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

    在properties中配置dubbo信息

    server.port=8001
    #当前应用名字
    dubbo.application.name=provider-server
    #注册中心地址
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    #扫描指定包下服务
    dubbo.scan.base-packages=com.king.service

    注意:我是在一台服务器上跑两个项目所以我由额外配置了tomcat的端口号

    建一个service接口和实现类

    package com.king.service;
    
    public interface TicketService {
    
        public String getTicket();
    
    }
    package com.king.service;
    
    import org.apache.dubbo.config.annotation.Service;
    import org.springframework.stereotype.Component;
    
    //zookeeper服务的注册与发现
    
    @Service    //被扫描到,在项目启动中就自动注册到注册中心,将服务发布出去,注解注解来源:apache,
    @Component  //放到spring容器中
    public class TicketServiceImpl implements TicketService{
        @Override
        public String getTicket() {
            return "《分布式系统之路》";
        }
    }

    注意:注解@Service调的是dubbo的,作用:让dubbo框架扫描的

    到这里简单的服务提供者就完成了,下面运行主启动类,测试

    注意:在启动项目时,先以开启zkserver-->dubbo-admin-->springboot项目的顺序一次打开,否则报错!!!

    通过dubbo-admin的7001端口就可以查看是否注册成功

    2.服务消费者搭建

    导入相关依赖。跟提供者一样的依赖

            <!--dubbo-->
            <!-- Dubbo Spring Boot Starter -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>2.7.3</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>
            <!-- 引入zookeeper -->
            <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>
        </dependencies>

    在application.properties配置消费者信息

    server.port=8082
    
    #当前应用名字
    dubbo.application.name=consumer-server
    #注册中心地址
    dubbo.registry.address=zookeeper://127.0.0.1:2181

     新建server类

    注意:正常企业级开发,服务的发现过程是通过导报指定的服务接口获得,让后通过pom引入,此处为了方便就直接引用了,引用方式看代码

    import org.apache.dubbo.config.annotation.Reference;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserService {
        //我们需要去拿注册中心的服务
        //需求:现在我们的用户想使用买票的服务,这要怎么弄呢 ?
        @Reference //仅需定义相同路径和名字相同的接口就能使用 ,企业用pom坐标
        TicketService ticketService;
    
        public void buyTicket(){
            String ticket = ticketService.getTicket();
            System.out.println("在注册中心拿到=》"+ticket);
        }
    
    }

    这个作用就是接收引用信息的接口

    package com.king.service;
    
    public interface TicketService {
    
        public String getTicket();
    
    }

    单元测,并运行

    import com.king.service.UserService;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    @SpringBootTest
    class ConsumerServerApplicationTests {
    
        @Autowired
        UserService userService;
    
        @Test
        void contextLoads() {
    
            userService.buyTicket();
    
        }
    
    }

    总结

     

     
  • 相关阅读:
    PHP中使用CURL实现Get和Post请求方法
    编码规范
    session跨域共享问题解决方案
    第二十七节 新增语义标签
    第二十六节 屏幕适配之rem单位
    第二十五节 屏幕适配之em单位
    第二十四节 屏幕适配之响应式布局
    第二十三节 屏幕适配之流体布局
    第二十二节 屏幕适配之适配布局类型
    第二十一节 屏幕适配之背景图尺寸的设置
  • 原文地址:https://www.cnblogs.com/CL-King/p/14299976.html
Copyright © 2020-2023  润新知