SpringBoot+dubbo+zookeeper搭建微服务分布式架构

SpringBoot+dubbo+zookeeper搭建微服务分布式结构

项目架构的演进

三层构–>分布式架构 -->服务架构(SOA)–>微服务分布式架构(简称:微服)

什么是分布式?

通俗就是把一个东西拆解成多个模块,我们这里把程序进行拆分模块,把每个模块部署到不同的服务器上进行工作,让他们远程相互调用,形成依赖,降低程序的耦合度,提高程序的内部性能为目的一种解决方式

常见的微服务分布式架构解决方案:

  1. 借助Dubbo+Zookeeper(基于rpc协议的调用)
  2. SpringCloud(基于Http协议实现的服务)

准备工作:

  • 具备zookeeper服务器环境(默认端口:2181)

Dubbo工作原理
SpringBoot+dubbo+zookeeper搭建微服务分布式架构_第1张图片

这里由于是在同一台计算机部署多模块,所以需要建一个父类SpringBoot 工程

在父类工程里创建多模块应用

  1. 创建父类SpringBoot工程

    修改pom的打包方式为pom

  2. 创建服务的提供者模块(SpringBoot工程)导入dubbo依赖

    编写接口业务,以及实现方法

    <!--添加dubbo相关依赖-->
    <dependency>
        <groupId>com.alibaba.spring.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.0.0</version>
        <!-- 排除依赖 -->
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.jboss.netty</groupId>
                <artifactId>netty</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!--zookeeper-->
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.4.6</version>
    </dependency>
    <dependency>
        <groupId>com.github.sgroschupf</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.1</version>
    </dependency>
    
    

    在springBoot配置文件中添加dubbo配置

    server.port=9001 #服务器的端口号
    
    #springboot集成dubbo的配置
    #发布的服务名称   名称可改
    spring.dubbo.application.id=dubbo_provider
    spring.dubbo.application.name=dubbo_provider
    #连接注册中心   
    spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
    #表示服务提供者
    spring.dubbo.server=true
    #指定用dubbo协议  不能改
    spring.dubbo.protocol.name=dubbo
    #指定服务提供者的端口   可以改
    spring.dubbo.protocol.port=20880
    
    

    使用注解在service实现类中暴露服务Service注解都是Alibaba包下的

    //使用注解@Service暴露服务(发布服务)
    @Service(interfaceClass =TestService.class,timeout = 2000)
    @Component  //创建本地bean
    public class TestServiceImpl implements TestService {
        @Override
        public String getHelloWord() {
            return "helloword";
        }
    }
    
    

    使用注解在springBoot启动类上开启Dubbo服务

    @SpringBootApplication
    @EnableDubboConfiguration   //开启dubbo
    public class DubboProviderApplication {
        public static void main(String[] args) {
            SpringApplication.run(DubboProviderApplication.class, args);
        }
    }
    
  3. 创建服务的提消费者模块(SpringBoot工程)导入dubbo依赖(Web工程)

    导入dubbo依赖与上面的提供者依赖的一样

    在springBoot配置文件中添加dubbo配置

    #server.port 消费者的服务端口
    server.port=9002
    
    #springboot整合dubbbo
    spring.dubbo.application.name=dubbo-consumer
    spring.dubbo.application.id=dubbo-consumer
    spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
    
    

    在SpringBoot启动类上开启dubbo

    @SpringBootApplication
    @EnableDubboConfiguration
    public class DubboConsumerApplication {
        public static void main(String[] args) {
            SpringApplication.run(DubboConsumerApplication.class, args);
        }
    
    }
    

    编写控制器调用远程调用方法

    使用注解@Reference注解引用远程服务

    @Reference的属性

    • interfaceClass 调用远程服务的接口

    • check属性 :(默认设置true)启动工程时检查服务是否存在,必须存在才能启动工程,false启动工程,放弃检查服务是否存在。

     @RestController
    public class TestController {
        //使用@Reference注解引用远程服务
        //将服务提供者接口,复制一份到消费者工程,而且接口所在的包的限定名要一致
        @Reference(interfaceClass = TestService.class,check = false)
        private TestService testService;
        @RequestMapping("/getData")
        public String getData(){
           //调用dubbo的远程服务
           String result=this.testService.getHelloWord();
           return result;
        }
    }
    

    注意:这里需要将提供者的接口,复制一份到消费者工程,接口所在的包必须要相同

测试远程访问调用消费者模块的业务方法

浏览器地址栏输入:localhost::消费者服务端口/请求名

你可能感兴趣的:(spring,spring,boot,分布式,zookeeper,java)