• SpringBoot-分布式整合


    分布式

    1. Dubbo

    image-20200927140022934

    2. 整合Dubbo Zookeeper SpringBoot

    1. 提供者提供服务

    1. 导入依赖

    <!--导入依赖 dubbo + zookeeper-->
    <!--dubbo-->
    <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
    <dependency>
       <groupId>org.apache.dubbo</groupId>
       <artifactId>dubbo-spring-boot-starter</artifactId>
       <version>2.7.8</version>
    </dependency>
    <!--引入zookeeper-->
    <!--zookeeper client-->
    <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
    <dependency>
       <groupId>com.github.sgroschupf</groupId>
       <artifactId>zkclient</artifactId>
       <version>0.1</version>
    </dependency>
    <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.6.2</version>
       <!--由于日志会冲突, 排出这个slf4j-log4j12-->
       <exclusions>
          <exclusion>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
          </exclusion>
       </exclusions>
    </dependency>
    

    2. 配置文件

    配置注册中心的地址, 以及服务发现名, 和要扫描的包

    server.port=8001
    
    # 服务应用名字
    dubbo.application.name=provider-server
    # 注册中心地址
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    # 哪些服务要被注册
    dubbo.scan.base-packages=com.wang.service
    

    3. 注册服务

    接口

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

    实现类

    package com.wang.service;
    
    import com.alibaba.dubbo.config.annotation.Service;
    import org.springframework.stereotype.Component;
    
    //zookeeper: 服务注册与发现
    
    //使用了dubbo后, 尽量不要使用Service注解(SpringBoot的Service)
    //这里的Service注解是dubbo的, 不要导错包!
    @Service
    //可以被扫描到, 在项目启动就自动注册到注册中心
    @Component
    public class TicketServiceImpl implements TicketService {
        @Override
        public String getTicket() {
            return "得到一张票!";
        }
    }
    

    2. 消费者如何消费

    1. 导入依赖

    与上面相同

    2. 配置文件

    配置注册中心的地址, 配置自己的服务名

    server.port=8002
    
    # 消费者去哪里拿服务, 要暴露自己的名字
    dubbo.application.name=consumer-server
    # 注册中心的地址
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    

    3. 从远程注入服务

    package com.wang.service;
    
    import org.apache.dubbo.config.annotation.Reference;
    import org.springframework.stereotype.Service;
    
    //放到容器中, 这里要用SpringBoot的
    @Service
    public class UserService {
        //想拿到provider-server提供的票, 要去注册中心拿到服务
        //引用, Pom坐标, 也可以定义与要使用的接口路径相同的接口名
        @Reference
        TicketService TICKET_SERVICE;
    
        public void buyTicket() {
            String ticket = TICKET_SERVICE.getTicket();
            System.out.println("在注册中心拿到=>" + ticket);
        }
    
    }
    

    3. 注意

    • 要先开启ZooKeeper和Dubbo Admin

    • 提供者的@Service注解是Dubbo包中的, 不要导错

    • 提供者使用@Component将类被SpringBoot托管, 不要用@Service

    • 消费者要注册到SpringBoot中, 使用SpringBoot的@Service

    • 用dubbo的@Reference引用远程调用的接口, 注意, 要在和远程接口路径相同的路径下定义接口

      image-20200927172214426

      image-20200927172233008

    image-20200927172309599

  • 相关阅读:
    CentOS7 虚拟机搭建、初始设置、简单使用
    Oozie-4.0.0-cdh5.3.6搭建
    ionic开发环境搭建
    nodejs+chromium 创建桌面应用程序
    常用mysql笔记
    javascript 操作 css Rule
    javascript正则表达式笔记
    grunt之dev-pro环境切换
    grunt之入门实践
    动态加载js
  • 原文地址:https://www.cnblogs.com/wang-sky/p/13740733.html
Copyright © 2020-2023  润新知