美文网首页
一、微服务场景模拟

一、微服务场景模拟

作者: 努力努力再努力_y | 来源:发表于2019-05-23 15:30 被阅读0次

    首先,我们需要模拟一个服务调用的场景。方便后面学习微服务架构

    一、创建父工程

    1.1 创建 maven 工程
    1.2 jar引入
    <?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>
    
        <groupId>cn.itcast.demo</groupId>
        <artifactId>cloud-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>pom</packaging>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.4.RELEASE</version>
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <spring-cloud.version>Finchley.SR1</spring-cloud.version>
            <mapper.starter.version>2.0.3</mapper.starter.version>
            <mysql.version>5.1.32</mysql.version>
        </properties>
    
        <!-- 手动引入才生效 -->
        <dependencyManagement>
            <dependencies>
                <!-- springCloud -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
    
                <!-- 通用Mapper启动器 -->
                <dependency>
                    <groupId>tk.mybatis</groupId>
                    <artifactId>mapper-spring-boot-starter</artifactId>
                    <version>${mapper.starter.version}</version>
                </dependency>
    
                <!-- mmysql驱动 -->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>${mysql.version}</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <!-- 所有子工程都有 -->
        <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>
    

    二 、服务提供者

    2.1 Spring脚手架创建工程
    • 创建Module


    • 添加依赖
    <?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">
        <parent>
            <artifactId>cloud-demo</artifactId>
            <groupId>cn.itcast.demo</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>user-service</artifactId>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper-spring-boot-starter</artifactId>
            </dependency>
        </dependencies>
    
    </project>
    
    • 项目结构


    2.2 编写代码
    • yml


    • application


      image.png
    • pojo


      image.png
    • mapper


    • service


    • controller


    2.3 启动并测试

    三、 服务调用者

    与上面类似,这里不再赘述,需要注意的是,我们调用user-service的功能,因此不需要mybatis相关依赖了。

    3.1 创建工程
    • 添加依赖
    <?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">
        <parent>
            <artifactId>cloud-demo</artifactId>
            <groupId>cn.itcast.demo</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>consumer-demo</artifactId>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
    
    </project>
    
    3.2 编写代码
    • 项目结构


    • yml


    • application


    • pojo


    • controller


    • 调出Run Dashboard


    3.3 启动测试

    四、 有没有问题?

    简单回顾一下,刚才我们写了什么:

    • use-service-demo:一个提供根据id查询用户的微服务
    • consumer-demo:一个服务调用者,通过RestTemplate远程调用user-service-demo

    流程如下:

    存在什么问题?

    • 在consumer中,我们把url地址硬编码到了代码中,不方便后期维护
    • consumer需要记忆user-service的地址,如果出现变更,可能得不到通知,地址将失效
    • consumer不清楚user-service的状态,服务宕机也不知道
    • user-service只有1台服务,不具备高可用性
    • 即便user-service形成集群,consumer还需自己实现负载均衡

    其实上面说的问题,概括一下就是分布式服务必然要面临的问题:

    • 服务管理
      • 如何自动注册和发现
      • 如何实现状态监管
      • 如何实现动态路由
    • 服务如何实现负载均衡
    • 服务如何解决容灾问题
    • 服务如何实现统一配置

    以上的问题,我们都将在SpringCloud中得到答案。

    相关文章

      网友评论

          本文标题:一、微服务场景模拟

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