分布式架构: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-admin\src\main\resources \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();

    }

}

 

 

 

总结

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2021-01-19 20:50  凸然猿  阅读(179)  评论(0编辑  收藏  举报