springboot与分布式

Dubbo/Zookeeper

Zookeeper

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

Docker安装

参考文档https://hub.docker.com/_/zookeeper

1
docker pull zookeeper

默认有3个端口。客户端2181,follow2888,election 3888

1
docker run --name ZK01 -p 2181:2181 --restart always -d zookeeper

Dubbo

Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 [1] Spring框架无缝集成。Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

使用

参考文档https://github.com/apache/dubbo

  • 消费者

    引入依赖

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.3</version>
    </dependency>
    <!-- zookeeper客户端 -->
    <dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>2.7.1</version>
    </dependency>

    新建生产者的接口(不需要实现类,但所在包名要一致)使用@Reference来引用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @Service
    public class UserService {


    @Reference
    TicketService ticketService;


    public void hello(){
    System.out.println("卖掉平"+ticketService.getTicket());
    }
    }

    与安卓的AIDL方式很像,一样需要拿到与生产者包名一致的接口即可

  • 生产者

    引入依赖

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.3</version>
    </dependency>
    <!-- zookeeper客户端 -->
    <dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>2.7.1</version>
    </dependency>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import org.apache.dubbo.config.annotation.Service;
    import org.springframework.stereotype.Component;

    /**
    * @author Sun
    * @date:11:15 2019/9/30
    * @description: 编写需要远程调用的服务,这里的@Service是dubbo的注解,指定改服务为暴露服务
    */
    @Component
    @Service
    public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicket() {
    return "买到票啦";
    }
    }

    配置zookeeper信息

    1
    2
    3
    4
    5
    6
    7
    dubbo:
    application:
    name: dubbo
    registry:
    address: zookeeper://x.x.x.x:2181
    scan:
    base-packages: com.sun.dubbo.providerticket.service

    遇到的问题

    • 我是整合在springboot中,所以引入的依赖是

    org.apache.dubbo
    dubbo-spring-boot-starter
    2.7.3
    • Caused by: java.lang.ClassNotFoundException: org.apache.curator.framework

      没有引入curator的依赖


      org.apache.curator
      curator-recipes
      2.7.1
    • 无需引入zkClient。

    • 版本要一致starter在2.7就是使用2.7的curator,recipes包含了framework和client。

SpringBoot/Spring Cloud

Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来,从而简化了开发者的代码量。spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。

SpringCloud分布式开发五大组件

  • 服务发现——Netflix Eureka

  • 客服端负载均衡——Netflix Ribbon

  • 断路器——Netflix Hystrix

  • 服务网关——Netflix Zuul

  • 分布式配置——Spring Cloud Config