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

一、微服务场景模拟

作者: 努力努力再努力_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中得到答案。

相关文章

  • 一、微服务场景模拟

    首先,我们需要模拟一个服务调用的场景。方便后面学习微服务架构 一、创建父工程 1.1 创建 maven 工程 1....

  • Java回调机制

    参考:http://www.bysocket.com/?p=636 这里模拟个场景:客户端发送msg给服务端,服务...

  • jmeter压测websocket相关知识

    业务场景:我们有一个微直播服务,类似于聊天室。需要模拟主播切图(学员会收到消息)、学员和游客发送消息,然后统计一共...

  • Json 返回null崩溃

    想要解决服务器返回json失败问题,就先模拟一下失败场景如下图所示,我模拟了一个json,oneKey是字符串,t...

  • Dubbo+Zookeeper实现rpc

    1.示例场景 使用dubbo模拟用户服务(消费者)调用资源服务(生产者) 2.示例图 生产者:生产者服务启动时会把...

  • cisco packet tracer教程一

    Cisco Packet Tracer界面: 1:logical是模拟化场景 Physical是真实场景模拟 2....

  • 模拟实战(1) - 快速了解Eureka服务注册与发现、高可用安

    前言:本章是我记录的SpringCloud实战模拟业务场景系列第一篇,其主要讲解了SpringCloud各个服务之...

  • 经典面试题——让你设计一个限流的系统怎么做?

    保障服务稳定的三大利器:熔断降级、服务限流和故障模拟。限流系统是当前很多系统都需要考虑的场景。首先在Nginx层面...

  • 2018年9月11日

    今天应部门经理的要求,同事们在公司模拟服务场景,我扮演了一天的某叔叔或某阿姨,享受着部门各位同事的服务,再给予各种...

  • APP开发模拟API

    测试API的模拟主要分以下2块 1.模拟服务器 2.模拟测试数据 一、模拟服务器解决方案 1).使用Apache开...

网友评论

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

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