美文网首页
搭建用户管理服务(提供者)

搭建用户管理服务(提供者)

作者: isuntong | 来源:发表于2020-01-08 21:10 被阅读0次

    创建通用的Dubbo依赖项目

    创建一个名为myshop-commons-dubbo项目,Dubbo需要创建服务提供者和服务消费者两个角色,他们都要依赖Dubbo的StarterPom,并且我们的项目都需要熔断机制,所以我们会提取出一个通用的项目以便于所有dubbo项目同意依赖

    创建项目

    添加自述文件

    克隆到本地

    复制过滤配置文件

    新建pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <parent>
            <groupId>com.suntong</groupId>
            <artifactId>myshop-dependencies</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <relativePath>../myshop-dependencies/pom.xml</relativePath>
        </parent>
    
        <artifactId>myshop-commons-dubbo</artifactId>
        <packaging>jar</packaging>
    
        <url>http://www.suntong.com</url>
        <inceptionYear>2018-Now</inceptionYear>
    
        <dependencies>
            <!-- Spring Boot Starter Settings -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
            </dependency>
            <!-- 状态检查 -->
            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>dubbo-spring-boot-actuator</artifactId>
            </dependency>
    
            <!-- Spring Cloud Settings -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
            </dependency>
        </dependencies>
    </project>
    

    托管到intelliJ

    创建源码目录

    此处我们修改下myshop-dependencies中的pom中的dubbo-spring-boot-starterspring-boot-starter-actuator的组和版本,actuator在starter-parent中有版本控制,所以不需要我们再声明版本号,如果我们需要指定版本号需要通过properties修改,如

    <properties>
        <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
    </properties>
    
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.6.RELEASE</version>
        </parent>
    
        <groupId>com.suntong</groupId>
        <artifactId>myshop-dependencies</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <packaging>pom</packaging>
    
        <url>http://www.suntong.com</url>
        <inceptionYear>2018-Now</inceptionYear>
    
        <properties>
            <!-- Environment Settings -->
            <java.version>1.8</java.version>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    
            <!-- Spring Boot Starter Settings
            <boot-actuator.version>2.2.2</boot-actuator.version>-->
            <boot-dubbo.version>2.7.4.1</boot-dubbo.version>
    
    
            <boot-mapper.version>2.0.2</boot-mapper.version>
            <boot-pagehelper.version>1.2.5</boot-pagehelper.version>
            <boot-druid.version>1.1.10</boot-druid.version>
    
            <!-- Spring Cloud Settings-->
            <cloud-hystrix.version>2.2.0.RELEASE</cloud-hystrix.version>
    
            <!-- Commons Settings -->
            <kyro.version>0.42</kyro.version>
            <mysql.version>5.1.47</mysql.version>
            <fastdfs.version>1.27</fastdfs.version>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <!-- Spring Boot Starter Begin-->
                <dependency>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-spring-boot-starter</artifactId>
                    <version>${boot-dubbo.version}</version>
                </dependency>
    <!--
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-actuator</artifactId>
                    <version>${boot-actuator.version}</version>
                </dependency>
    -->
                <dependency>
                    <groupId>tk.mybatis</groupId>
                    <artifactId>mapper-spring-boot-starter</artifactId>
                    <version>${boot-mapper.version}</version>
                </dependency>
                <dependency>
                    <groupId>com.github.pagehelper</groupId>
                    <artifactId>pagehelper-spring-boot-starter</artifactId>
                    <version>${boot-pagehelper.version}</version>
                </dependency>
                <dependency>
                    <groupId>com.alibaba</groupId>
                    <artifactId>druid-spring-boot-starter</artifactId>
                    <version>${boot-druid.version}</version>
                </dependency>
                <!-- Spring Boot Starter End -->
    
                <!-- Spring Cloud Begin -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
                    <version>${cloud-hystrix.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
                    <version>${cloud-hystrix.version}</version>
                </dependency>
    
                <!-- Spring Cloud End -->
    
                <!-- Commons Begin -->
                <dependency>
                    <groupId>de.javakaffee</groupId>
                    <artifactId>kryo-serializers</artifactId>
                    <version>${kyro.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.csource</groupId>
                    <artifactId>fastdfs-client-java</artifactId>
                    <version>${fastdfs.version}</version>
                </dependency>
                <!-- Commons End -->
            </dependencies>
        </dependencyManagement>
    
        <build>
            <plugins>
                <!-- Compiler 插件, 设定 JDK 版本 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <showWarnings>true</showWarnings>
                    </configuration>
                </plugin>
    
                <!-- 打包 jar 文件时,配置 manifest 文件,加入 lib 包的 jar 依赖 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <configuration>
                        <archive>
                            <addMavenDescriptor>false</addMavenDescriptor>
                        </archive>
                    </configuration>
                    <executions>
                        <execution>
                            <configuration>
                                <archive>
                                    <manifest>
                                        <!-- Add directory entries -->
                                        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                        <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                                        <addClasspath>true</addClasspath>
                                    </manifest>
                                </archive>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
    
                <!-- resource -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                </plugin>
    
                <!-- install -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-install-plugin</artifactId>
                </plugin>
    
                <!-- clean -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                </plugin>
    
                <!-- ant -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                </plugin>
    
                <!-- dependency -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                </plugin>
            </plugins>
    
            <pluginManagement>
                <plugins>
                    <!-- Java Document Generate -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>prepare-package</phase>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
    
                    <!-- YUI Compressor (CSS/JS压缩) -->
                    <plugin>
                        <groupId>net.alchim31.maven</groupId>
                        <artifactId>yuicompressor-maven-plugin</artifactId>
                        <version>1.5.1</version>
                        <executions>
                            <execution>
                                <phase>prepare-package</phase>
                                <goals>
                                    <goal>compress</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <encoding>UTF-8</encoding>
                            <jswarn>false</jswarn>
                            <nosuffix>true</nosuffix>
                            <linebreakpos>30000</linebreakpos>
                            <force>true</force>
                            <includes>
                                <include>**/*.js</include>
                                <include>**/*.css</include>
                            </includes>
                            <excludes>
                                <exclude>**/*.min.js</exclude>
                                <exclude>**/*.min.css</exclude>
                            </excludes>
                        </configuration>
                    </plugin>
                </plugins>
            </pluginManagement>
    
            <!-- 资源文件配置 -->
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <excludes>
                        <exclude>**/*.java</exclude>
                    </excludes>
                </resource>
                <resource>
                    <directory>src/main/resources</directory>
                </resource>
            </resources>
        </build>
    
        <distributionManagement>
            <repository>
                <id>nexus-releases</id>
                <name>Nexus Release Repository</name>
                <url>http://192.168.79.130:8081/repository/maven-releases/</url>
            </repository>
            <snapshotRepository>
                <id>nexus-snapshots</id>
                <name>Nexus Snapshot Repository</name>
                <url>http://192.168.79.130:8081/repository/maven-snapshots/</url>
            </snapshotRepository>
        </distributionManagement>
    
        <repositories>
            <repository>
                <id>nexus</id>
                <name>Nexus Repository</name>
                <url>http://192.168.79.130:8081/repository/maven-public/</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <releases>
                    <enabled>true</enabled>
                </releases>
            </repository>
    
            <repository>
                <id>aliyun-repos</id>
                <name>Aliyun Repository</name>
                <url>http://maven.aliyun.com/nexus/content/groups/public</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
    
            <repository>
                <id>sonatype-repos</id>
                <name>Sonatype Repository</name>
                <url>https://oss.sonatype.org/content/groups/public</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
            <repository>
                <id>sonatype-repos-s</id>
                <name>Sonatype Repository</name>
                <url>https://oss.sonatype.org/content/repositories/snapshots</url>
                <releases>
                    <enabled>false</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
        </repositories>
    
        <pluginRepositories>
            <pluginRepository>
                <id>nexus</id>
                <name>Nexus Plugin Repository</name>
                <url>http://192.168.79.130:8081/repository/maven-public/</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <releases>
                    <enabled>true</enabled>
                </releases>
            </pluginRepository>
    
            <pluginRepository>
                <id>aliyun-repos</id>
                <name>Aliyun Repository</name>
                <url>http://maven.aliyun.com/nexus/content/groups/public</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </pluginRepository>
        </pluginRepositories>
    
    </project>
    

    org.apache.dubbo为apache孵化后的的新版本,比com.alibaba版本更强大一些,而org.springframework.boot
    也相对com.alibaba而言对于健康检查actuator更强大一些(因为我在给hystrix配置servlet导包时导不进去了)

    此时再修改myshop-comons-dubbo的pom

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <parent>
            <groupId>com.suntong</groupId>
            <artifactId>myshop-dependencies</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <relativePath>../myshop-dependencies/pom.xml</relativePath>
        </parent>
    
        <artifactId>myshop-commons-dubbo</artifactId>
        <packaging>jar</packaging>
    
        <url>http://www.suntong.com</url>
        <inceptionYear>2018-Now</inceptionYear>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
            </dependency>
            <!-- 状态检查 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
    
            <!-- Spring Cloud Settings -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
            </dependency>
        </dependencies>
    </project>
    
    
    dependencyManagement与dependencies区别
      dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
      dependencies即使在子模块中不写该依赖项,那么子模块仍然会从父项目中继承该依赖项(全部继承)。
    
    scope 是用来限制 dependency 的作用范围的,影响 maven 项目在各个生命周期时导入的 package 的状态,主要管理依赖的部署。
    scope 的作用范围:
    (1)compile:默认值,适用于所有阶段(表明该 jar 包在编译、运行以及测试中路径均可见),并且会随着项目一起发布。
    (2)test:只在测试时使用,用于编译和运行测试代码,不会随项目发布。
    (3)runtime:无需参与项目的编译,不过后期的测试和运行周期需要其参与,与 compile 相比,跳过了编译。如 JDBC 驱动,适用运行和测试阶段。
    (4)provided:编译和测试时有效,但是该依赖在运行时由服务器提供,并且打包时也不会被包含进去。如 servlet-api。
    (5)system:类似 provided,需要显式提供包含依赖的jar,不会从 maven 仓库下载,而是从本地文件系统获取,需要添加 systemPath 的属性来定义路径。
    

    为什么这两个依赖好使,为什么这两个版本好使?因为前面入门的时候我试过了,版本查看可以到

    https://mvnrepository.com/

    查看,方便

    同时注意修改idea中关于maven仓库的配置,之前因为使用了错误的setting文件导致一直连不上私服

    最后提交修改到gitlab

    创建服务提供者

    创建项目

    添加自述文件

    克隆到本地

    复制ignore文件

    new一个pom

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <parent>
            <groupId>com.suntong</groupId>
            <artifactId>myshop-dependencies</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <relativePath>../myshop-dependencies/pom.xml</relativePath>
        </parent>
    
        <artifactId>myshop-service-user-api</artifactId>
        <packaging>jar</packaging>
    
        <url>http://www.suntong.com</url>
        <inceptionYear>2018-Now</inceptionYear>
    
        <dependencies>
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>com.suntong</groupId>
                <artifactId>myshop-commons-domain</artifactId>
                <version>${project.parent.version}</version>
            </dependency>
        </dependencies>
    </project>
    

    创建源文件夹

    创建包

    创建接口

    package com.suntong.myshop.service.user.api;
    
    import com.suntong.myshop.commons.domain.TbUser;
    
    import java.util.List;
    
    public interface TbUserService {
        List<TbUser> selectAll();
    }
    
    

    新建项目

    初始化文件

    克隆到本地

    复制ignore文件

    新建pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <parent>
            <groupId>com.suntong</groupId>
            <artifactId>myshop-dependencies</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <relativePath>../myshop-dependencies/pom.xml</relativePath>
        </parent>
    
        <artifactId>myshop-service-user-provider</artifactId>
        <packaging>jar</packaging>
    
        <url>http://www.suntong.com</url>
        <inceptionYear>2018-Now</inceptionYear>
    
        <dependencies>
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-framework</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-recipes</artifactId>
            </dependency>
    
            <!-- Spring Boot Starter Settings -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <!-- Projects Settings -->
            <dependency>
                <groupId>com.suntong</groupId>
                <artifactId>myshop-commons-dubbo</artifactId>
                <version>${project.parent.version}</version>
            </dependency>
            <dependency>
                <groupId>com.suntong</groupId>
                <artifactId>myshop-commons-mapper</artifactId>
                <version>${project.parent.version}</version>
            </dependency>
    
            <dependency>
                <groupId>com.suntong</groupId>
                <artifactId>myshop-service-user-api</artifactId>
                <version>${project.parent.version}</version>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <mainClass>com.suntong.myshop.service.user.provider.MyShopServiceUserProviderApplication</mainClass>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    托管

    添加文件夹

    新建包

    新建Application

    package com.suntong.myshop.service.user.provider;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.hystrix.EnableHystrix;
    import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    import sun.applet.Main;
    import tk.mybatis.spring.annotation.MapperScan;
    
    @EnableHystrix
    @EnableHystrixDashboard
    @SpringBootApplication(scanBasePackages = "com.suntong.myshop")
    @MapperScan(basePackages = "com.suntong.myshop.commons.mapper")
    @EnableTransactionManagement//开启事务
    public class MyShopServiceUserProviderApplication {
        public static void main(String[] args) {
            SpringApplication.run(MyShopServiceUserProviderApplication.class, args);
            Main.main(args);
        }
    }
    
    

    新建application.yml

    # Spring boot application
    spring:
      application:
        name: myshop-service-user-provider
      datasource:
        druid:
          url: jdbc:mysql://192.168.79.135:3306/myshop?useUnicode=true&characterEncoding=utf-8&useSSL=false
          username: root
          password: 123456
          initial-size: 1
          min-idle: 1
          max-active: 20
          test-on-borrow: true
          driver-class-name: com.mysql.jdbc.Driver
    server:
      port: 8501
    
    # MyBatis Config properties
    mybatis:
      type-aliases-package: com.suntong.myshop.commons.domain
      mapper-locations: classpath:mapper/*.xml
    
    # Services Versions
    services:
      versions:
        user:
          v1: 1.0.0
    
    # Dubbo Config properties
    dubbo:
      ## Base packages to scan Dubbo Component:@com.alibaba.dubbo.config.annotation.Service
      scan:
        basePackages: com.suntong.myshop.service.user.provider.api.impl
      ## ApplicationConfig Bean 运维端口
      application:
        id: myshop-service-user-provider
        name: myshop-service-user-provider
        qos-port: 22222
        qos-enable: true
      ## ProtocolConfig Bean dubbo端口
      protocol:
        id: dubbo
        name: dubbo
        port: 20881
        status: server
        serialization: kryo
      ## RegistryConfig Bean
      registry:
        id: zookeeper
        address: zookeeper://192.168.79.136:2181?backup=192.168.79.136:2182,192.168.79.136:2183
    
    # Enables Dubbo All Endpoints
    management:
      endpoint:
        dubbo:
          enabled: true
        dubbo-shutdown:
          enabled: true
        dubbo-configs:
          enabled: true
        dubbo-services:
          enabled: true
        dubbo-references:
          enabled: true
        dubbo-properties:
          enabled: true
      # Dubbo Health
      health:
        dubbo:
          status:
            ## StatusChecker Name defaults (default : "memory", "load" )
            defaults: memory
            ## StatusChecker Name extras (default : empty )
            extras: load,threadpool
    
    
    logging:
      level.com.suntong.myshop.commons.mapper: DEBUG
    

    实现接口

    package com.suntong.myshop.service.user.provider.api.impl;
    
    import com.suntong.myshop.commons.domain.TbUser;
    import com.suntong.myshop.commons.mapper.TbUserMapper;
    import com.suntong.myshop.service.user.api.TbUserService;
    import org.apache.dubbo.config.annotation.Service;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.transaction.annotation.Transactional;
    
    import java.util.List;
    
    @Service(version = "${services.versions.user.v1}")
    @Transactional(readOnly = true)
    public class TbUserServiceImpl implements TbUserService {
    
        @Autowired
        private TbUserMapper tbUserMapper;
        
        @Override
        public List<TbUser> selectAll() {
            return tbUserMapper.selectAll();
        }
    }
    
    
    version:当一个接口的实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用;
    <!-- start--服务提供者   -->
        <!-- 机器A提供1.0.0版本服务 -->
        <dubbo:service interface="com.xxx.ProviderService" version="1.0.0" />
        <!-- 机器B提供2.0.0版本服务 -->
        <dubbo:service interface="com.xxx.ProviderService" version="2.0.0" />
        <!-- end--服务提供者   -->
        
        <!-- start--服务消费者   -->
        <!-- 机器C消费1.0.0版本服务 -->
        <dubbo:reference id="consumerService" interface="com.xxx.ProviderService" version="1.0.0" />
        <!-- 机器D消费2.0.0版本服务 -->
        <dubbo:reference id="consumerService" interface="com.xxx.ProviderService" version="2.0.0" />
        <!-- 消费任意一个版本服务 -->
        <dubbo:reference id="consumerService" interface="com.xxx.ProviderService" version="*" />
        <!-- end--服务消费者   -->
    
    
    group:当一个接口有多种实现时,可以用group区分;
    <!-- start--服务提供者   -->
        <!-- dubbo中当一个接口有多个实现类时,需要添加group来区分 -->
        <!-- 机器A:服务提供者 -->
        <bean id="zhenliangsongA" class="com.xxx.ServiceImplA" />
        <dubbo:service group="song" interface="com.xxx.InterfaceService" ref="zhenliangsongA" />
        <!-- 机器B:服务提供者 -->
        <bean id="zhenliangsongB" class="com.xxx.ServiceImplB" />
        <dubbo:service group="wang" interface="com.xxx.InterfaceService" ref="zhenliangsongB" />
        <!-- end--服务提供者   -->
        
        <!-- start--服务消费者   -->
        <!-- 机器C:服务消费者:dubbo消费者也可以设置为“*”,表示消费任意一个group的服务均可   -->
        <dubbo:reference id="consumerService" interface="com.xxx.InterfaceService" group="*" />
        <!-- 机器D:服务消费者:dubbo消费者也可以设置为“song”,表示只能消费group是song的接口实现类   -->
        <dubbo:reference id="consumerService" interface="com.xxx.InterfaceService" group="song" />
        <!-- 机器E:服务消费者:dubbo消费者也可以设置为“wang”,表示只能消费group是wang的接口实现类   -->
        <dubbo:reference id="consumerService" interface="com.xxx.InterfaceService" group="wang" />
        <!-- end--服务消费者   -->
    

    启动mysql
    启动zookeeper
    启动Dubbo-Admin

    运行Application,服务可以注册到zookeeper

    中间出现许多错误,比如缺少curator依赖,spring-boot-starter-parent版本低缺少类,升级后缺少hibernate-jpa-2.1-api的jar包,需要在dependencies中手动增加,同时domain中TbUser类的@Table注解中有错误,也未实现序列化,都需要手动增加,目前为止还在报无法连接redis的错误,但是可以注册到zookeeper。

    TbUser.java

    package com.suntong.myshop.commons.domain;
    
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import java.io.Serializable;
    import java.util.Date;
    
    @Table(name = "tb_user")
    public class TbUser implements Serializable {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        /**
         * 用户名
         */
        private String username;
    
        /**
         * 密码,加密存储
         */
        private String password;
    
        /**
         * 注册手机号
         */
        private String phone;
    
        /**
         * 注册邮箱
         */
        private String email;
    
        private Date created;
    
        private Date updated;
    
        /**
         * @return id
         */
        public Long getId() {
            return id;
        }
    
        /**
         * @param id
         */
        public void setId(Long id) {
            this.id = id;
        }
    
        /**
         * 获取用户名
         *
         * @return username - 用户名
         */
        public String getUsername() {
            return username;
        }
    
        /**
         * 设置用户名
         *
         * @param username 用户名
         */
        public void setUsername(String username) {
            this.username = username;
        }
    
        /**
         * 获取密码,加密存储
         *
         * @return password - 密码,加密存储
         */
        public String getPassword() {
            return password;
        }
    
        /**
         * 设置密码,加密存储
         *
         * @param password 密码,加密存储
         */
        public void setPassword(String password) {
            this.password = password;
        }
    
        /**
         * 获取注册手机号
         *
         * @return phone - 注册手机号
         */
        public String getPhone() {
            return phone;
        }
    
        /**
         * 设置注册手机号
         *
         * @param phone 注册手机号
         */
        public void setPhone(String phone) {
            this.phone = phone;
        }
    
        /**
         * 获取注册邮箱
         *
         * @return email - 注册邮箱
         */
        public String getEmail() {
            return email;
        }
    
        /**
         * 设置注册邮箱
         *
         * @param email 注册邮箱
         */
        public void setEmail(String email) {
            this.email = email;
        }
    
        /**
         * @return created
         */
        public Date getCreated() {
            return created;
        }
    
        /**
         * @param created
         */
        public void setCreated(Date created) {
            this.created = created;
        }
    
        /**
         * @return updated
         */
        public Date getUpdated() {
            return updated;
        }
    
        /**
         * @param updated
         */
        public void setUpdated(Date updated) {
            this.updated = updated;
        }
    }
    

    myshop-commons pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <parent>
            <groupId>com.suntong</groupId>
            <artifactId>myshop-dependencies</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <relativePath>../myshop-dependencies/pom.xml</relativePath>
        </parent>
    
        <artifactId>myshop-commons</artifactId>
        <packaging>jar</packaging>
    
        <url>http://www.suntong.com</url>
        <inceptionYear>2018-Now</inceptionYear>
    
        <dependencies>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.hibernate.validator</groupId>
                <artifactId>hibernate-validator</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.hibernate.javax.persistence</groupId>
                <artifactId>hibernate-jpa-2.1-api</artifactId>
            </dependency>
    
            <dependency>
                <groupId>de.javakaffee</groupId>
                <artifactId>kryo-serializers</artifactId>
            </dependency>
            <dependency>
                <groupId>com.github.ben-manes.caffeine</groupId>
                <artifactId>guava</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-pool2</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
        </dependencies>
    </project>
    
    

    myshop dependencies pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.2.RELEASE</version>
        </parent>
    
        <groupId>com.suntong</groupId>
        <artifactId>myshop-dependencies</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <packaging>pom</packaging>
    
        <url>http://www.suntong.com</url>
        <inceptionYear>2018-Now</inceptionYear>
    
        <properties>
            <!-- Environment Settings -->
            <java.version>1.8</java.version>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    
            <!-- Spring Boot Starter Settings
            <boot-actuator.version>2.2.2</boot-actuator.version>-->
            <boot-dubbo.version>2.7.4.1</boot-dubbo.version>
    
    
            <boot-mapper.version>2.0.2</boot-mapper.version>
            <boot-pagehelper.version>1.2.5</boot-pagehelper.version>
            <boot-druid.version>1.1.10</boot-druid.version>
    
            <!-- Spring Cloud Settings-->
            <cloud-hystrix.version>2.2.0.RELEASE</cloud-hystrix.version>
    
            <!-- Commons Settings -->
            <kyro.version>0.42</kyro.version>
            <mysql.version>5.1.47</mysql.version>
            <fastdfs.version>1.27</fastdfs.version>
    
    
            <jpa.version>1.0.0.Final</jpa.version>
            <curator.version>2.12.0</curator.version>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.apache.curator</groupId>
                    <artifactId>curator-framework</artifactId>
                    <version>${curator.version}</version>
                </dependency>
    
                <dependency>
                    <groupId>org.apache.curator</groupId>
                    <artifactId>curator-recipes</artifactId>
                    <version>${curator.version}</version>
                </dependency>
    
                <dependency>
                    <groupId>org.hibernate.javax.persistence</groupId>
                    <artifactId>hibernate-jpa-2.1-api</artifactId>
                    <version>${jpa.version}</version>
                </dependency>
    
                <!-- Spring Boot Starter Begin-->
                <dependency>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-spring-boot-starter</artifactId>
                    <version>${boot-dubbo.version}</version>
                </dependency>
    <!--
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-actuator</artifactId>
                    <version>${boot-actuator.version}</version>
                </dependency>
    -->
                <dependency>
                    <groupId>tk.mybatis</groupId>
                    <artifactId>mapper-spring-boot-starter</artifactId>
                    <version>${boot-mapper.version}</version>
                </dependency>
                <dependency>
                    <groupId>com.github.pagehelper</groupId>
                    <artifactId>pagehelper-spring-boot-starter</artifactId>
                    <version>${boot-pagehelper.version}</version>
                </dependency>
                <dependency>
                    <groupId>com.alibaba</groupId>
                    <artifactId>druid-spring-boot-starter</artifactId>
                    <version>${boot-druid.version}</version>
                </dependency>
                <!-- Spring Boot Starter End -->
    
                <!-- Spring Cloud Begin -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
                    <version>${cloud-hystrix.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
                    <version>${cloud-hystrix.version}</version>
                </dependency>
    
                <!-- Spring Cloud End -->
    
                <!-- Commons Begin -->
                <dependency>
                    <groupId>de.javakaffee</groupId>
                    <artifactId>kryo-serializers</artifactId>
                    <version>${kyro.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.csource</groupId>
                    <artifactId>fastdfs-client-java</artifactId>
                    <version>${fastdfs.version}</version>
                </dependency>
                <!-- Commons End -->
            </dependencies>
        </dependencyManagement>
    
        <build>
            <plugins>
                <!-- Compiler 插件, 设定 JDK 版本 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <showWarnings>true</showWarnings>
                    </configuration>
                </plugin>
    
                <!-- 打包 jar 文件时,配置 manifest 文件,加入 lib 包的 jar 依赖 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <configuration>
                        <archive>
                            <addMavenDescriptor>false</addMavenDescriptor>
                        </archive>
                    </configuration>
                    <executions>
                        <execution>
                            <configuration>
                                <archive>
                                    <manifest>
                                        <!-- Add directory entries -->
                                        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                        <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                                        <addClasspath>true</addClasspath>
                                    </manifest>
                                </archive>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
    
                <!-- resource -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                </plugin>
    
                <!-- install -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-install-plugin</artifactId>
                </plugin>
    
                <!-- clean -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                </plugin>
    
                <!-- ant -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                </plugin>
    
                <!-- dependency -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                </plugin>
            </plugins>
    
            <pluginManagement>
                <plugins>
                    <!-- Java Document Generate -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>prepare-package</phase>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
    
                    <!-- YUI Compressor (CSS/JS压缩) -->
                    <plugin>
                        <groupId>net.alchim31.maven</groupId>
                        <artifactId>yuicompressor-maven-plugin</artifactId>
                        <version>1.5.1</version>
                        <executions>
                            <execution>
                                <phase>prepare-package</phase>
                                <goals>
                                    <goal>compress</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <encoding>UTF-8</encoding>
                            <jswarn>false</jswarn>
                            <nosuffix>true</nosuffix>
                            <linebreakpos>30000</linebreakpos>
                            <force>true</force>
                            <includes>
                                <include>**/*.js</include>
                                <include>**/*.css</include>
                            </includes>
                            <excludes>
                                <exclude>**/*.min.js</exclude>
                                <exclude>**/*.min.css</exclude>
                            </excludes>
                        </configuration>
                    </plugin>
                </plugins>
            </pluginManagement>
    
            <!-- 资源文件配置 -->
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <excludes>
                        <exclude>**/*.java</exclude>
                    </excludes>
                </resource>
                <resource>
                    <directory>src/main/resources</directory>
                </resource>
            </resources>
        </build>
    
        <distributionManagement>
            <repository>
                <id>nexus-releases</id>
                <name>Nexus Release Repository</name>
                <url>http://192.168.79.130:8081/repository/maven-releases/</url>
            </repository>
            <snapshotRepository>
                <id>nexus-snapshots</id>
                <name>Nexus Snapshot Repository</name>
                <url>http://192.168.79.130:8081/repository/maven-snapshots/</url>
            </snapshotRepository>
        </distributionManagement>
    
        <repositories>
            <repository>
                <id>nexus</id>
                <name>Nexus Repository</name>
                <url>http://192.168.79.130:8081/repository/maven-public/</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <releases>
                    <enabled>true</enabled>
                </releases>
            </repository>
    
            <repository>
                <id>aliyun-repos</id>
                <name>Aliyun Repository</name>
                <url>http://maven.aliyun.com/nexus/content/groups/public</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
    
            <repository>
                <id>sonatype-repos</id>
                <name>Sonatype Repository</name>
                <url>https://oss.sonatype.org/content/groups/public</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
            <repository>
                <id>sonatype-repos-s</id>
                <name>Sonatype Repository</name>
                <url>https://oss.sonatype.org/content/repositories/snapshots</url>
                <releases>
                    <enabled>false</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
        </repositories>
    
        <pluginRepositories>
            <pluginRepository>
                <id>nexus</id>
                <name>Nexus Plugin Repository</name>
                <url>http://192.168.79.130:8081/repository/maven-public/</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <releases>
                    <enabled>true</enabled>
                </releases>
            </pluginRepository>
    
            <pluginRepository>
                <id>aliyun-repos</id>
                <name>Aliyun Repository</name>
                <url>http://maven.aliyun.com/nexus/content/groups/public</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </pluginRepository>
        </pluginRepositories>
    
    </project>
    

    忙了一天都在修改依赖版本等等,果然微服务的一大缺点
    系统部署依赖
    真的是很麻烦,所以笔记也是学习这些的一个举足轻重的点,没有笔记以后再用和没学一样,搞好依赖就要半天。

    相关文章

      网友评论

          本文标题:搭建用户管理服务(提供者)

          本文链接:https://www.haomeiwen.com/subject/jqyanctx.html