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

深碍√TFBOYSˉ_ 2022-11-26 06:57 352阅读 0赞

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

项目架构的演进

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

什么是分布式?

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

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

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

准备工作:

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

Dubbo工作原理
在这里插入图片描述

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

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

  1. 创建父类SpringBoot工程

    修改pom的打包方式为pom

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

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

    1. <!--添加dubbo相关依赖-->
    2. <dependency>
    3. <groupId>com.alibaba.spring.boot</groupId>
    4. <artifactId>dubbo-spring-boot-starter</artifactId>
    5. <version>2.0.0</version>
    6. <!-- 排除依赖 -->
    7. <exclusions>
    8. <exclusion>
    9. <groupId>org.springframework</groupId>
    10. <artifactId>spring</artifactId>
    11. </exclusion>
    12. <exclusion>
    13. <groupId>org.jboss.netty</groupId>
    14. <artifactId>netty</artifactId>
    15. </exclusion>
    16. </exclusions>
    17. </dependency>
    18. <!--zookeeper-->
    19. <dependency>
    20. <groupId>org.apache.zookeeper</groupId>
    21. <artifactId>zookeeper</artifactId>
    22. <version>3.4.6</version>
    23. </dependency>
    24. <dependency>
    25. <groupId>com.github.sgroschupf</groupId>
    26. <artifactId>zkclient</artifactId>
    27. <version>0.1</version>
    28. </dependency>

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

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

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

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

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

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

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

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

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

    在SpringBoot启动类上开启dubbo

    1. @SpringBootApplication
    2. @EnableDubboConfiguration
    3. public class DubboConsumerApplication {
    4. public static void main(String[] args) {
    5. SpringApplication.run(DubboConsumerApplication.class, args);
    6. }
    7. }

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

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

    @Reference的属性

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

      @RestController
      public class TestController {

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

      }

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

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

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

发表评论

表情:
评论列表 (有 0 条评论,352人围观)

还没有评论,来说两句吧...

相关阅读

    相关 如何快速一个服务架构

    微服务火了很久,但网上很少有文章能做到成熟地将技术传播出来,同时完美地照顾“初入微服务领域人员”,从 0 开始,采用通俗易懂的语言去讲解微服务架构的系列。所以,我们策划了这篇文