90分钟

基于腾讯云TSF开发商家买单系统

实验预计耗时:90分钟

1. 课程背景

1.1 课程目的

腾讯微服务平台 (TSF) 是一个以微服务注册中心为核心功能的服务治理平台,提供应用全生命周期管理、数据化运营、立体化监控和服务治理等功能。

自建服务治理平台,存在可用性低,功能组件依托开源社区,费事费力等问题。TSF的推出,不仅降低了企业运维成本,而且和腾讯云其他产品完美契合,大大便利了用户微服务部署体验,使用户可以专注于业务的开发。另外,腾讯云官方除了提供SDK之外,还提供了完整的开发Demo和开发指引,让用户可以快速上手,享受微服务带来的开发乐趣。

本次实战课程,我们通过微服务开发商家买单系统,实现诸如商品列表查询,促销规则添加查询,下订单,订单查询等功能。在本地开发实现后,我们还会将代码打包,上传至TSF平台,实现线上快速部署。

相信通过本课程的学习,您可以加深对腾讯云TSF功能的掌握,对TSF服务的优势有很深的体会。

1.2 课前知识准备

学习本课程前,学员需要掌握以下前置知识:

1、能力基础

  • Java编程基础:包括数据结构、逻辑语句、函数、注解、面向对象编程以及web开发基础。
  • Spring开发基础:了解Spring框架的基本架构和开发思想。

2、相关概念

  • 微服务:微服务架构是一项在云中部署应用和服务的新技术。微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。
  • 注册中心:注册中心可以说是微服务架构中的“通讯录”,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。
image004

3、相关技术

  • Maven:Maven是一个项目管理工具,我们通过创建Maven工程快速获取项目所需要的jar包,并保存在本地仓库,也可以帮助我们对自己的项目进行生成jar包等项目管理操作。
  • Spring Boot:Spring Boot是一款流行的Java开发框架,其设计目的是简化Spring应用的初始搭建以及开发过程,使开发人员不再需要定义样板化的配置。其开发流程大致如下:
image005
  • Spring Cloud: Spring Cloud是基于Spring Boot实现微服务的框架,其核心是服务的注册与发现,Spring Cloud默认使用Eureka作为服务注册中心。

2. 实验环境

2.1 实验操作环境

本课程需要以下实验操作环境:

  • 可以接入互联网的笔记本电脑或者台式机,包括但不限于Windows、MAC系统
  • 安装浏览器,包括但不限于谷歌浏览器、火狐浏览器
  • 实验环境:计算机本地+腾讯云控制台
  • Java软件开发工具包JDK(版本:1.8)
  • Maven(版本:3.5及以上)
  • Eclipse或者IDEA,此实验采用IDEA作为开发工具

2.2 实验架构图

本实验开发商品管理、订单管理、促销管理共计三个服务,模拟店家通过促销活动影响下单金额的场景,调用关系如图所示:

image006

2.3 实验的数据规划表

资源名称

下载地址

腾讯云账号

涉及产品如下:VPC、CVM、TSF

JDK

下载JDK

Maven

下载Maven

IntelliJ IDEA

下载IntelliJ IDEA

Consul

下载Consul

Demo工程

下载Demo工程

Postman

下载Postman

3. 实验流程

image007

第一步,准备基本的开发环境,包括JDK安装, Maven安装,IDE开发工具以及Postman的安装。

接下来,通过Demo项目在本地测试部署,来熟悉微服务项目的开发流程,本环节需要使用Maven将SDK所需依赖下载到本地仓库,且借助轻量级注册中心,让我们可以在本地测试项目。

在了解Demo的运行原理后,我们开始商家卖单系统的开发,通过在SDK依赖已经下载的前提下,使用SpringCloud依次开发商品管理、促销管理和订单管理三个服务,最终实现查询、下单等基本功能。

项目完成后,我们将项目代码打包上传至TSF平台,并对应用进行线上部署。本环节,我们需要创建TSF集群,添加云主机,上传应用,最后使用部署组部署应用。

最后一个环节,我们在客户端进行线上项目的使用测试,并体验TSF平台实现基本的监控功能。

4. 实验步骤

任务1 开发环境准备

【任务目标】

在本地计算机安装Java开发环境,使学员能够在本地进行代码开发。

【任务步骤】

1、安装 Java环境

1.安装Java

如果没有安装 Java,请下载安装 Java 软件开发套件(JDK)。官方下载连接:https://www.oracle.com/technetwork/java/javase/downloads/index.html

2.设置 Java 环境

设置JAVA_HOME环境变量,并指向您机器上的 Java 安装目录。

以 Java 1.8.0_144 版本为例,操作系统的输出如下:

操作系统

输出

Windows

JAVA_HOME:D:\develop\Java\jdk1.8.0_144 Path添加变量值:;% JAVA _HOME%\bin

Linux

export JAVA_HOME=/usr/local/java-current

Mac OSX

export JAVA_HOME=/Library/Java/Home

3.检查 Java 安装

打开终端,执行如下命令:

java -version

如果输出 Java 版本号,说明 Java 安装成功。

image008

2、安装 Maven环境

1.下载安装 Maven

官方下载连接:https://maven.apache.org/download.cgi

2.设置 MAVEN_HOME 和 PATH 环境变量

操作系统

输出

Windows

MAVEN_HOME:D:\develop\maven Path添加变量值:;%MAVEN_HOME%\bin

Linux/ Mac OSX

Export MAVEN_HOME=/usr/local/maven/apache-maven-3.3.9 export PATH=$MAVEN_HOME/bin:$PATH

3.验证 Maven 安装

当 Maven 安装完成后, 通过执行如下命令验证 Maven 是否安装成功。

mvn --version

4.Maven 配置 TSF 私服地址

找到 Maven 所使用的配置文件,一般在~/.m2/settings.xml中,在 settings.xml 中加入如下连接中的配置:

https://main.qcloudimg.com/raw/0e3c73b64c4ec64ae9b16d1a347db462/settings.xml

注:其中 localRepository 标签默认被注释,该标签用于指定本地仓库位置,用于存放后续步骤中下载的SDK。学员可以根据自己的需要配置到一个自定义目录,参考如下:

   <settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
       <div id="saka-gui-root"/>
       <localRepository>D:\develop\maven\repository</localRepository>
       <pluginGroups/>
       <proxies/>
       <servers/>
       <mirrors/>
       <profiles>
           <profile>
               <id>nexus</id>
               <repositories>
                   <repository>
                       <id>central</id>
                       <url>http://repo1.maven.org/maven2</url>
                       <releases>
                           <enabled>true</enabled>
                       </releases>
                       <snapshots>
                           <enabled>true</enabled>
                       </snapshots>
                   </repository>
               </repositories>
               <pluginRepositories>
                   <pluginRepository>
                       <id>central</id>
                       <url>http://repo1.maven.org/maven2</url>
                       <releases>
                           <enabled>true</enabled>
                       </releases>
                       <snapshots>
                           <enabled>true</enabled>
                       </snapshots>
                   </pluginRepository>
               </pluginRepositories>
           </profile>
           <profile>
               <id>qcloud-repo</id>
               <repositories>
                   <repository>
                       <id>qcloud-central</id>
                       <name>qcloud mirror central</name>
                       <url>
   http://mirrors.cloud.tencent.com/nexus/repository/maven-public/
                       </url>
                       <snapshots>
                           <enabled>true</enabled>
                       </snapshots>
                       <releases>
                           <enabled>true</enabled>
                       </releases>
                   </repository>
               </repositories>
               <pluginRepositories>
                   <pluginRepository>
                       <id>qcloud-plugin-central</id>
                       <url>
   http://mirrors.cloud.tencent.com/nexus/repository/maven-public/
                       </url>
                       <snapshots>
                           <enabled>true</enabled>
                       </snapshots>
                       <releases>
                           <enabled>true</enabled>
                       </releases>
                   </pluginRepository>
               </pluginRepositories>
           </profile>
       </profiles>
       <activeProfiles>
           <activeProfile>nexus</activeProfile>
           <activeProfile>qcloud-repo</activeProfile>
       </activeProfiles>
   </settings>
  1. 验证配置是否成功

配置完settings后,可以在CMD命令行窗口执行如下命令。

mvn help:effective-settings

运行命令后,当我们看到BUILD SUCCESS时,表明 settings.xml 格式正确。

image009

3、安装 IDE开发工具

1.下载IntelliJ IDEA

下载地址:https://www.jetbrains.com/idea/download/#section=windows

请学员下载对应系统的安装包后自行安装

  1. 配置IDEA

在Configure选项栏下,点击Settings

image010

在搜索栏搜索maven,将maven的位置进行配置。配置的内容包括:

  • Maven home directory:Maven安装路径
  • User settings file:刚刚配制好的settings.xml文件
  • Local repository:本地仓库位置
image011

任务2 项目测试部署

【任务目标】

学员能够在本地安装TSF SDK,并能够顺利运行Demo项目。

【任务步骤】

1、启动轻量级服务注册中心

1.Consul下载

Consul下载连接:https://www.consul.io/downloads.html

本地使用轻量服务注册中心场景下支持 Windows 和 Linux / MacOS 操作系统。请学员下载自己操作系统对应的软件包。

2.Consul启动

解压软件包后进入解压目录,启动服务注册中心,启动命令如下:

Windows 操作系统:

.\consul.exe agent -dev

Linux / macOS 操作系统:

./consul agent -dev
  1. Consul启动验证

通过浏览器查看服务注册中心页面,http://127.0.0.1:8500。页面如下图所示:

image012

2、安装 SDK

1.下载Demo工程

下载地址:

https://cloud.tencent.com/document/product/649/20261

tsf-demo-simple-develop工程目录如下:

|- consumer-demo:服务消费者

|- provider-demo:服务提供者

|- kafka-demo:Kafka微服务示例

|- zuul-demo:基于 Zuul 的微服务网关示例

|- cmq-producer-demo:CMQ 消息队列消息生产者示例

|- cmq-consumer-demo:CMQ 消息队列消息消费者示例

|- mongodb-demo:调用 MongoDB 的微服务示例

|- mysql-demo:调用 MySQL 的微服务示例

|- redis-demo:调用 Redis 的微服务示例

|- pom.xml

2.安装 SDK

使用IDEA点击Open打开tsf-demo-simple-develop工程,IDEA会在项目启动时下载项目所需SDK以及其他依赖。

image013

你也可以使用maven命令,在pom.xml所在目录执行如下命令,即可下载 TSF SDK。

mvn clean package

下载成功后,我们可以在maven仓库中查看到新下载的依赖,如下图所示:

image014

3.启动demo工程

我们分别运行provider-demo和consumer-demo两个模块。运行时首先配置参数,让我们的服务可以注册在本地的服务注册中心,参数如下:

-Dtsf_consul_ip=127.0.0.1:指定注册中心IP为本地

-Dtsf_consul_port=8500:指定注册中心端口号8500

-Dtsf_application_id=a

-Dtsf_group_id=b

-Dtsf.swagger.enabled=false

参数配置如下图:

image015

配置成功后分别运行两个模块,我们可以在注册中心查看到服务注册的信息:

image016

在浏览器中输入:http://127.0.0.1:18083/echo-rest/hello。

可以得到如下图返回信息,说明本地运行成功。

注:这里调用的是consumer-demo中的第一个服务接口,学员可以测试使用其他接口的调用效果。

image017

任务3 微服务代码开发

【任务目标】

在demo工程基础上,在本地开发商家买单系统。项目结构如下:

|- tsf-goods:商品管理

|- tsf-sales:促销管理

|- tsf-orders:订单管理

|- pom.xml:原demo工程的pom文件

【任务步骤】

1、商品管理模块开发

1.项目模块创建

首先创建子模块tsf-goods,邮件点击:项目名称>New>Module,新建一个模块。

image018

选择项目类型为Maven,然后直接点击Next。

image019

输入ArtifactId为tsf-goods,点击Next。

image020

接下来,确认好模块的位置和目录名称后,点击Finish进行创建。

image021

刚才创建的tsf-goods模块,打开模块中的pom.xml文件,将dependencies标签修改如下。

   <dependencies>
       <!-- TSF启动器 包含完整依赖 -->
       <dependency>
           <groupId>com.tencent.tsf</groupId>
           <artifactId>spring-cloud-tsf-starter</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-hystrix</artifactId>
       </dependency>
       <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>fastjson</artifactId>
           <version>1.2.7</version>
       </dependency>
   </dependencies>

注:依赖内容就是将consumer-demo中的依赖复制过来并添加了一个fastjson依赖,fastjson可以用来处理json字符串的转换。

配置启动类:

   @SpringBootApplication
   @EnableFeignClients
   @EnableTsf
   public class GoodsApplication {
   
       @Bean
       public RestTemplate restTemplate() {
           return new RestTemplate();
       }
   
       public static void main(String[] args) {
           SpringApplication.run(GoodsApplication.class, args);
       }
   }

配置application.yml:

   server:
     port: 8090
   spring:
     application:
       name: goods

创建一个Goods类,并生成Goods类的构造方法和setter/getter方法。

   public class Goods {
       private String goodsId;
       private String goodsName;
       private Double goodsPrices;
       // 请补充构造方法和setter/getter方法
   }

创建GoodsController类,并创建一个全局Map用于存储商品信息。

   @RestController
   public class GoodsController {
       private static Map<String, Goods> goodsMap = new HashMap<>();
   
       @Autowired
   	private RestTemplate restTemplate;
   }

2.商品查询功能

在GoodsController中添加getGoodsById函数,代码如下:

   @RequestMapping(value = "/goods/{goodsId}", method = RequestMethod.GET)
   public String getGoodsById(@PathVariable String goodsId) {
   	if (goodsMap.containsKey(goodsId)) {
   		return JSON.toJSONString(goodsMap.get(goodsId));
   	} else {
   		return "No goods";
   	}
   }

3.商品列表查询

初次查询没有商品时,会自动添加

   	@RequestMapping(value = "/goods/list", method = RequestMethod.GET)
       public String list() {
           List<Goods> goodsList = new ArrayList<>();
           if (goodsMap.isEmpty()) {
               for (int i = 1; i < 11; i++) {
                   Goods goods = new Goods();
                   String goodsId = "goodsId-" + i;
                   String goodsName = "goodsName-" + i;
                   goods.setGoodsId(goodsId);
                   goods.setGoodsName(goodsName);
                   goods.setGoodsPrices(Double.parseDouble(10 + i + ""));
                   goodsMap.put(goodsId, goods);
               }
           }
           for (String key : goodsMap.keySet()) {
               goodsList.add(goodsMap.get(key));
           }
           return JSON.toJSONString(goodsList);
       }

模块完成后的结构如下:

image022

4.运行测试

和demo工程一样,配置如下启动参数:

-Dtsf_consul_ip=127.0.0.1:指定注册中心IP为本地

-Dtsf_consul_port=8500:指定注册中心端口号8500

-Dtsf_application_id=a

-Dtsf_group_id=b

-Dtsf.swagger.enabled=false

启动后,我们在本地浏览器输入如下请求:

127.0.0.1:8090/goods/list

可以看到如下返回内容:

image023

2、促销管理模块开发

1.项目模块创建

创建子模块tsf-sales,添加tsf相关依赖与fastjaon依赖,并配置启动类

配置application.yml:

   server:
     port: 8094
   spring:
     application:
       name: sales

创建一个Sales类,并生成构造方法,setter/getter类。

   public class Sales {
       private String salesId;
       private String goodsId;
       private Double discount;
       // 自行生成构造方法,setter/getter类
   }

创建SalesController类,并创建一个全局Map用于存储促销信息。

   @RestController
   public class SalesController {
   	private static Map<String, Sales> salesMap = new HashMap<String, Sales>();
   }

2.添加促销规则

在SalesController中添加increase函数,代码如下:

   @RequestMapping(value = "/sales/increase", method = RequestMethod.POST)
       public Boolean increase(@RequestBody Sales newSales) {
           String goodsId = newSales.getGoodsId();
           for (String key : salesMap.keySet()) {
               Sales sales = salesMap.get(key);
               if (sales.getGoodsId().equals(goodsId)) {
                   salesMap.put(key,newSales);
               }
           }
           salesMap.put(newSales.getSalesId(),newSales);
           return true;
       }
  1. 查询促销规则
       @RequestMapping("/sales/{goodsId}")
       public String getSalesById(@PathVariable String goodsId) {
           if (salesMap.isEmpty()) {
               return "No discount";
           } else {
               for (String key : salesMap.keySet()) {
                   Sales sales = salesMap.get(key);
                   if (sales.getGoodsId().equals(goodsId)) {
                       Sales resultSales = salesMap.get(sales.getSalesId());
                       return JSON.toJSONString(resultSales);
                   }
               }
               return "No discount";
           }
       }
  1. 删除促销规则
   @RequestMapping("/sales/decrease/{salesId}")
       public Boolean decrease(@PathVariable String salesId) {
           if (salesMap.containsKey(salesId)) {
               salesMap.remove(salesId);
               return true;
           }
           return false;
       }

5.项目启动与测试

配置与商品管理模块想相同的启动参数,运行主程序类,启动项目。

使用postman进行测试,在postman中增加一条促销规则:

http://IP:8094/sales/increase

"Content-type: application/json",

{"salesId":"sales-7","goodsId":"goods-1","discount":0.8}

点击Send后,返回true,说明项目代码无误。

image024

3、订单管理模块开发

1.项目模块创建

创建子模块tsf-orders,添加tsf相关依赖,并配置启动类:

   @SpringBootApplication
   @EnableFeignClients // 使用Feign微服务调用时请启用
   @EnableTsf
   public class OrdersApplication {
   
       @LoadBalanced
       @Bean
       public RestTemplate restTemplate() {
           return new RestTemplate();
       }
   
       public static void main(String[] args) {
           SpringApplication.run(OrdersApplication.class, args);
       }
   }

配置application.yml:

   server:
     port: 8092
   spring:
     application:
       name: orders

创建GoodsController类,并创建一个全局Map用于存储商品信息。

   @RestController
   public class OrdersController {
   
       private static Map<String,Orders> ordersMap = new HashMap<>();
   
       @Autowired
       private RestTemplate restTemplate;
   }

2.创建一些实体类

类名称与私有属性如下,学员需自行补充构造函数,getter/setter方法:

类名称

私有属性

Orders

private String ordersId; private String userId; private Double total; private List<GoodsInOrder> goods;

GoodsInOrder

private String goodsId; private Double number;

Orders

同tsf-sales中Sales类

Goods

同tsf-goods中Goods类

3.下单购买功能

在OrdersController中添加buy函数,代码如下:

   @RequestMapping(value = "/orders/buy", method = RequestMethod.POST)
       public Map<String, Object> buy(@RequestBody Orders newOrders) {
           Double total = 0.0;
           List<GoodsInOrder> goodsInOrders = newOrders.getGoods();
           // 对商品订单进行遍历
           for(GoodsInOrder goodsInOrder:goodsInOrders){
               String goodsJson = restTemplate.getForObject("http://tsf-goods/goods/" + goodsInOrder.getGoodsId(), String.class);
               String salesJson = restTemplate.getForObject("http://tsf-sales/sales/" + goodsInOrder.getGoodsId(), String.class);
               // 确认商品是否存在
               if(!goodsJson.equals("No goods")){
                   Goods goods = JSON.parseObject(goodsJson, Goods.class);
                   // 确认促销是否存在
                   if (!salesJson.equals("No discount")){
                       Sales sales = JSON.parseObject(salesJson, Sales.class);
                       // 计算商品价格
                       total += sales.getDiscount()*goods.getGoodsPrices()*goodsInOrder.getNumber();
                   }else {
                       total += goods.getGoodsPrices()*goodsInOrder.getNumber();
                   }
               }
           }
           // 编辑返回信息
           HashMap<String, Object> map = new HashMap<>();
           Orders orders = new Orders();
           orders.setOrdersId(newOrders.getOrdersId());
           orders.setUserId(newOrders.getUserId());
           orders.setGoods(newOrders.getGoods());
           orders.setTotal(total);
           ordersMap.put(newOrders.getOrdersId(),orders);
           map.put("total",total);
           return map;
       }

4.订单查询功能和统计功能

在OrdersController中添加 ordersInfo和 report函数,代码如下:

   @RequestMapping("/orders/{ordersId}")
       public String ordersInfo(@PathVariable("ordersId") String ordersId) {
           if (ordersMap.isEmpty()) {
               return "No orders";
           } else {
               Orders orders = ordersMap.get(ordersId);
               return JSON.toJSONString(orders);
           }
       }
   
   @RequestMapping("/orders/report")
       public List<Map<String, Object>> report() {
           ArrayList<Map<String, Object>> maps = new ArrayList<>();
           if (ordersMap.isEmpty()) {
               return null;
           } else {
               System.out.println(ordersMap);
               for (String key : ordersMap.keySet()) {
                   Orders orders = ordersMap.get(key);
                   HashMap<String, Object> map = new HashMap<>();
                   map.put("orderId",orders.getOrdersId());
                   map.put("userId",orders.getUserId());
                   map.put("total",orders.getTotal());
                   maps.add(map);
               }
           }
           return maps;
       }

4、本地功能测试

本地启动项目,在postman中增加一条购买请求:

http://127.0.0.1:8094/orders/buy

"Content-type: application/json",

{"ordersId":"orders-1","userId":"user-1",

"goods":[{"goodsId":"goods-1","number":1},

{"goodsId":"goods-2","number":1}]

}

发送成功后得到订单的总金额,如下图所示:

image025

5、服务应用打包

应用的功能确认后,我们使用Maven对每一个服务进行生成jar包,jar包是一个java项目编译结果的封装,可以在本地运行,可以部署到TSF集群上运行和管理。

使用IDEA,点击右侧Maven选项卡,点击每一模块下的Lifecycle,双击生命周期中的package,即可开始打包。

image026

打包运行结果大致如下,其中我们看到BUILD SUCCESS时,表示打包成功:

image027

打包成功后,我们可以在该模块目录的target文件夹下,查看到已有jar包。

<img src="https://course-public-resources-1252758970.cos.ap-chengdu.myqcloud.com/%E5%AE%9E%E6%88%98%E8%AF%BE/201912TSF/tsf/image028.png" alt="image028" style="zoom:80%;" />

依次打包tsf-goods、tsf-sales、tsf-orders三个模块的jar包,等待上传TSF平台。

任务4 项目线上部署

【任务目标】

对已有服务的jar包进行线上部署,部署关系如下:

项目jar包

实例

部署组

应用组

tsf-goods

Instance-1

Group-1

App-1

tsf-sales

Instance-2

Group-2

App-2

tsf-orders

Instance-3

Group-3

App-3

【任务步骤】

1、新建TSF集群

进入腾讯微服务平台,点击集群页,创建一个集群,集群网络需要用户提前新建。

image029

2、导入云主机

创建后,点击导入云主机,此时如果可用区下没有可以实用的云服务器,我们就需要在同一可用区下新建3个云主机。

image030

1.新建云主机

点击新建云主机,进入到CVM购买界面,本实验购买的CVM基本参数如下:

image031

参数

配置说明

地域与机型

与TSF同可用区下的低配机型即可

镜像

CentOS 7.6 64位

存储与宽带

50G系统盘;按使用流量

安全组

放通全部端口

2.导入云主机

创建实例成功后,将全部CVM导入TSF集群。

image032

导入方式选择安装Agent。

image033

3.安装Agent

Agent是TSF用来管理CVM的软件,需要手动安装在每一台云主机上。只需要复制安装脚本到每一台CVM内粘贴运行,即可安装成功。点击安装Agent,我们可以看到如下安装脚本:

image034
   cd /root && if [ -f tsf-agent/uninstall ]; then chmod +x tsf-agent/uninstall; tsf-agent/uninstall; fi && if [ -f tsf-agent/ops/uninstall.sh ]; then chmod +x tsf-agent/ops/uninstall.sh; tsf-agent/ops/uninstall.sh; fi && rm -rf tsf-agent* && wget https://tsf-ap-guangzhou-1254962064.cos.ap-guangzhou.myqcloud.com/tsf-agent/install/tsf-agent.tar.gz -O tsf-agent.tar.gz && tar --no-same-owner -xzf tsf-agent.tar.gz && chmod +x tsf-agent/ops/install.sh; tsf-agent/ops/install.sh

分别登录每一台CVM,粘贴并运行脚本代码,安装信息如下所示。

image035

安装成功后,在云主机列表,我们可以看到可用状态为绿色的可用,就表明此时TSF可以接入该云主机。

image036

3、上传应用

集群创建成功后,我们就可以上传打包好的应用了。

1.创建应用

点击应用管理,新建应用,选择虚拟机部署,普通应用。

<img src="https://course-public-resources-1252758970.cos.ap-chengdu.myqcloud.com/%E5%AE%9E%E6%88%98%E8%AF%BE/201912TSF/tsf/image037.png" alt="image037" style="zoom:80%;" />

2.上传应用包

点击应用后,选择程序包管理,分别上传我们的jar包,使用时间戳作为版本号,并备注一下,便于我们自己区分。

<img src="https://course-public-resources-1252758970.cos.ap-chengdu.myqcloud.com/%E5%AE%9E%E6%88%98%E8%AF%BE/201912TSF/tsf/image038.png" alt="image038" style="zoom:80%;" />

4、应用部署

1.新建部署组

选择部署组,点击新建部署组,选择关联app,并启用日志配置项,点击保存&下一步。

<img src="https://course-public-resources-1252758970.cos.ap-chengdu.myqcloud.com/%E5%AE%9E%E6%88%98%E8%AF%BE/201912TSF/tsf/image039.png" alt="image039" style="zoom:80%;" />

在下一步中,选择部署的实例。

2.部署应用

部署组创建成功后,依次点击部署应用,部署应用成功后最终效果如下,此时服务已经可以调用了。

image040

任务5 功能测试与监控

【任务目标】

将我们打包的服务jar包进行线上部署,对应关系如下:

【任务步骤】

1、功能测试

1.添加商品列表

使用app-1对应的公网IP地址,访问/goods/list。

image041

在postman或浏览器地址栏输入如下请求:Instance1-IP:8090/goods/list

如返回结果成功,效果如下:

image042

2.添加促销规则

使用app-2对应的公网IP地址,添加促销规则:

Instance2-IP:8094/sales/increase
image043

3.使用下单功能

使用app-3对应的公网IP地址,使用下单功能:

Instance3-IP:8092/orders/buy
image044

4.使用下单查询功能:

Instance3-IP:8092/orders/orders-1
image045

如返回信息均无误,说明实验运行成功。至此,微服务的基本功能在腾讯云TSF上都已实现了。

2、微服务监控

1.日志查询

接下来我们使用TSF上的一些功能,来查看服务调用的情况。点击日志服务,选择日志索引,我们可以查看到微服务日志信息。

image046

2.服务依赖拓扑

点击服务依赖拓扑,可以查看可视化的微服务调用拓扑。

image047

3.调用链查询

点击调用链查询,可以查看每一个Trace ID下的调用情况,从而分析时延原因等。

image048

至此,商家买单系统的功能开发与部署就全部完成了。