记录:296
场景:基于Spring Cloud架构应用Nacos,版本2.1.0。包括Nacos部署、微服务集成Nacos,微服务注册、微服务配置、微服务调用(RestTemplate和Spring Cloud OpenFeign)。
版本:
JDK 1.8
Spring Boot 2.6.3
Spring Cloud 2021.0.1
Spring Cloud Alibaba 2021.0.1.0
nacos-server-2.1.0
名词:
以下摘自官网。
Nacos: Dynamic Naming and Configuration Service.
Nacos (official site: nacos.io) is an easy-to-use platform designed for dynamic service discovery and configuration and service management. It helps you to build cloud native applications and microservices platform easily.
一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Service is a first-class citizen in Nacos. Nacos supports almost all type of services,for example,Dubbo/gRPC service, Spring Cloud RESTFul service or Kubernetes service.
一、基础
1.Nacos相关地址
(1)官网地址
https://nacos.io/zh-cn/
(2)开源地址
https://github.com/alibaba/Nacos
(3)下载地址
https://github.com/alibaba/nacos/releases
2.Nacos基础
Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos的四个主要功能(摘自官网):
(1)Service Discovery and Service Health Check.服务发现与服务监控检查。
(2)Dynamic Configuration Management.动态配置管理。
(3)Dynamic DNS Service.动态DNS服务。
(4)Service and MetaData Management.服务和元数据管理。
二、部署Nacos
本例使用nacos-server-2.1.0,请到官网下载。
部署Nacos要做四件事:第一件,到官网下载nacos对应版本的包;第二件,根据nacos提供的SQL脚本初始化数据库相应的表及其数据。第三件,修改application.properties配置,比如数据库连接信息。第四件,使用\bin目录脚本,启动nacos。
1.下载包nacos-server-2.1.0介绍
下载nacos-server-2.1.0.zip。解压后,目录下包括\bin;\conf;\target;以及LICENSE和NOTICE文件。
1.1 bin目录
在\bin目录中,包括启动和关闭脚本,startup是启动脚本,shutdown是关闭脚本。其中.sh是Linux环境脚本,在Windows环境中使用.cmd脚本。
1.2 conf目录
在\conf目录中,包括nacos应用的相关配置。application.properties,它是nacos应用暴露给使用者的基础配置。使用者可以按需修改。nacos-mysql.sql是nacos启动的数据库脚本。本例只关注这两个文件。
1.3 target目录
在\target目录,nacos-server.jar就是nacos的可执行jar包,自带Tomcat容器。
2.初始化数据库脚本
表结构位置:nacos\conf\nacos-mysql.sql
2.1创建数据库
本例数据库名称:hub_nacos
用户名/口令:hub_nacos/******
2.2初始化SQL脚本
把nacos\conf\nacos-mysql.sql的脚本在hub_nacos数据库中完成初始化。
2.3初始化后表清单
在hub_nacos库中,使用如下SQL查看表清单。
SELECT * FROM information_schema.TABLES aa
WHERE aa.TABLE_SCHEMA = 'hub_nacos';
在hub_nacos库中,表清单。
3.修改application.properties配置
3.1 application.properties说明
在application.properties中,可以按需修改nacos微应用的配置,比如server的contextPath或者port等。
3.2修改数据库连接信息
在application.properties修改数据库连信息。在默认状态下,application.properties中如下信息是使用#号注释的,因此需放开注释,同时按需修改指定的数据库名称、用户名称以及口令。本例配置如下。
#数据源使用MySQL
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=nacos
4.启动Nacos
本例的bin位置在nacos\bin下,在windows环境下打开cmd.exe,进入到nacos\bin目录。
4.1单机版启动命令
startup.cmd -m standalone
4.2单机版启动成功截图
从日志:Tomcat started on port(s): 8848 (http) with context path '/nacos'.确认服务启动成功。
如下,启动截图。
5.访问Nacos
Nacos提供了浏览器端的dashboard,便于操作和使用。
5.1默认登入信息
地址: http://localhost:8848/nacos
用户/口令: nacos/nacos
5.2登录页面
登录页面
5.3登录首页
使用默认nacos/nacos,登录首页。
三、Nacos应用
本例使用Nacos指定的命名空间。
1.菜单介绍
Nacos左侧导航栏,包括配置管理、服务管理、权限管理、命令空间、集群管理。
配置管理/配置列表:展现已经加载到Nacos的配置。
配置管理/服务列表:展现已经注册到Nacos的微服务。
命名空间:创建命名空间和管理命名空间。默认有一个public。
2.新建命名空间
2.1进入命名空间页面
命名空间页面。
2.2创建命名空间
创建命名空间。
2.3 hub命名空间
创建完成hub命名空间。创建完成后:e8556e14-61e4-482b-b979-2230e00d1442。
2.4配置列表中的命名空间
在配置管理/配置列表中,已经多了hub空间。
3.查看命名空间
3.1命名空间页面
从左侧导航栏,进入命名空间菜单,查命名空间详细信息。可以对已经新建成功的命名空间做编辑、删除等操作。其中,public命名空间只能查看。
3.2数据库表中
新建成功的命名空间在数据库表:tenant_info。
4.新建配置
本例在hub命名空间新建配置config-hub.yaml,内容是:
hub:
msg: This is from Nacos config.
4.1选择命名空间
在配置管理/配置列表中,选择hub命名空间如图。
4.2填写配置
填写配置信息。
4.3发布配置
点击发布,就发布配置成功。
4.4持久化配置
新建配置并发布成功后,配置信息会持久化到MySQL数据中。只要没有做删除操作情况下,当Nacos关闭并重启后,会自动从数据库加载历史已近发布的配置。
5.查看配置
查看配置可以从两个路口查看,一是Nacos的dashboard;二是数据库表。
5.1 Nacos的dashboard
在Nacos的dashboard中,可以做新建、修改、删除、发布、克隆、导出等操作。实际开发过程中,推荐使用图形化界面操作。
从配置管理/配置列表进入界面。
5.2数据库表
当前生效的配置信息分布在表:config_info中;历史配置信息分布在表:his_config_info。可以直接在MySQL的客户端中使用SQL语句查询配置信息
四、微服务
微服务工程名:example-201-nacos。微服务以Spring Boot 2.6.3、Spring Cloud 2021.0.1、Spring Cloud Alibaba 2021.0.1.0为基础构建。
搭建多模块微服务项目,可以参考如下博文。
博文:基于Maven和IntelliJ IDEA搭建多模块微服务项目(工程)
地址:
https://blog.csdn.net/zhangbeizhen18/article/details/125825806
1.微服务example-201-nacos
在微服务example-201-nacos中,实现微服务注册与动态加载配置。
1.1创建微服务工程
微服务工程名:example-201-nacos。
1.2.pom.xml依赖
在pom.xml中引入核心依赖。包括spring-boot、spring-cloud、spring-cloud、nacos等。
org.springframework.boot
spring-boot-dependencies
${spring.boot.version}
pom
import
org.springframework.cloud
spring-cloud-dependencies
${spring.cloud.version}
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring.cloud.alibaba.version}
pom
import
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-starter-netflix-ribbon
org.springframework.cloud
spring-cloud-starter-loadbalancer
org.springframework.cloud
spring-cloud-starter-bootstrap
org.springframework.boot
spring-boot-starter-web
1.3.启动类
包名全路径:com.hub.example。
启动类名称:NacosExampleApplication。
注解@SpringBootApplication:代表NacosExampleApplication是微服务启动类。
注解@EnableDiscoveryClient:代表启用服务注册与发现。
package com.hub.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class NacosExampleApplication {
public static void main(String[] args) {
SpringApplication.run(NacosExampleApplication.class);
}
}
1.4业务类
1.4.1业务Controller类
包名全路径:com.hub.example.controller。
Controller类名称:HubController。
注解@RestController、@RequestMapping、@PostMapping、@GetMapping :代表Spring Web发布RestFul请求服务的注解。
注解@RefreshScope、@Value配合使用,用来验证实时从Nacos的配置中心加载实时发布的配置。
package com.hub.example.controller;
import com.hub.example.domain.CityBO;
import com.hub.example.domain.ResultMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.*;
import java.util.UUID;
/**
* POST请求
* http://127.0.0.1:18080/center/hub/getInfo
* 请求Json格式数据 {"cityName":"杭州","randomNo":"310000"}
* Get请求
* http://127.0.0.1:18080/center/hub/getConfig
* @date: 2022-09-25 22:19
*/
// 从配置中心加载的配置中取值
@RefreshScope
@Slf4j
@RestController
@RequestMapping("/hub")
public class HubController {
// 从配置中心加载的配置中取值
@Value("${hub.msg}")
private String hubMessage;
@PostMapping("/getInfo")
public ResultMap getInfo(@RequestBody CityBO cityBO) {
log.info("HubController->getInfo接收cityBO = " + cityBO);
ResultMap resultMap = new ResultMap();
resultMap.put("cityName", cityBO.getCityName());
resultMap.put("randomNo", cityBO.getRandomNo());
resultMap.put("randomUUID", UUID.randomUUID().toString());
log.info("HubController->getInfo返回resultMap = " + resultMap);
return resultMap;
}
@GetMapping ("/getConfig")
public ResultMap getConfig() {
log.info("HubController->getConfig开始执行.");
ResultMap resultMap = new ResultMap();
resultMap.put("hubMessage", hubMessage);
log.info("HubController->getConfig返回resultMap=" + resultMap);
return resultMap;
}
}
1.5配置类
无。
1.6配置文件
在\src\main\resources\目录下添加bootstrap.yml和application.yml。
微服务启动时,优先加载bootstrap.yml文件,并从Nacos服务器中加载配置到本地。
1.6.1 bootstrap.yml
bootstrap.yml内容如下:
server:
port: 18080
servlet:
context-path: /center
spring:
application:
# 微服务名称,从pom文件的artifactId标签取值
name: @artifactId@
cloud:
nacos:
# 服务发现,微服务名称,主机IP和端口,命名空间ID
discovery:
service: ${spring.application.name}
server-addr: localhost:8848
namespace: e8556e14-61e4-482b-b979-2230e00d1442
# 服务配置,主机IP和端口,命名空间ID,文件后缀,配置信息(数据ID,刷新方式,分组名称)
config:
server-addr: localhost:8848
namespace: e8556e14-61e4-482b-b979-2230e00d1442
file-extension: yaml
shared-configs:
- data-id: config-hub.yaml
refresh: true
group: DEFAULT_GROUP
1.6.2 application.yml
application.yml,把此文件需要的内容都可以移到Nacos的配置中心。
2.微服务example-201-client-rest
2.1创建微服务工程
微服务工程名:example-201-client-rest。
2.2 pom.xml依赖
在pom.xml中引入核心依赖。包括spring-boot、spring-cloud、spring-cloud、nacos等。
org.springframework.boot
spring-boot-dependencies
${spring.boot.version}
pom
import
org.springframework.cloud
spring-cloud-dependencies
${spring.cloud.version}
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring.cloud.alibaba.version}
pom
import
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-starter-netflix-ribbon
org.springframework.cloud
spring-cloud-starter-loadbalancer
org.springframework.cloud
spring-cloud-starter-bootstrap
org.springframework.boot
spring-boot-starter-web
2.3启动类
包名全路径:com.hub.example。
启动类名称:RestExampleApplication。
注解@SpringBootApplication:代表RestExampleApplication是微服务启动类。
注解@EnableDiscoveryClient:代表启用服务注册与发现。
package com.hub.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class RestExampleApplication {
public static void main(String[] args) {
SpringApplication.run(RestExampleApplication.class);
}
}
2.4业务类
2.4.1 Controller
包名全路径:com.hub.example.controller。
Controller类名称:RestHubController。
注解@RestController、@RequestMapping、@PostMapping、@GetMapping :代表Spring Web发布RestFul请求服务的注解。
注解@Value:用来从.yml配置文件中获取配置信息。
/**
* POST请求
* http://127.0.0.1:19090/rest/restHub/getInfo
* 请求Json格式数据 {"cityName":"杭州","cityNo":"310000"}
*/
@Slf4j
@RestController
@RequestMapping("/restHub")
public class RestHubController {
@Value("${hub.microServiceUrl}")
private String microServiceUrl;
@Autowired
private RestTemplate restTp;
@PostMapping("/getInfo")
public ResultMap getInfo(@RequestBody CityVO cityVO) {
log.info("RestHubController->getInfo接收cityVO = " + cityVO);
CityBO cityBO = new CityBO();
cityBO.setCityName(cityVO.getCityName());
cityBO.setCityNo(cityVO.getCityNo());
ResultMap resultMap = restTp.postForObject(microServiceUrl + "/center/hub/getInfo", cityBO, ResultMap.class);
log.info("RestHubController->getInfo返回resultMap = " + resultMap);
return resultMap;
}
}
2.5配置类
2.5.1 RestConfig
在RestConfig配置类中,初始化RestTemplate对象。
package com.hub.example.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestConfig {
@LoadBalanced
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
2.6配置文件
在\src\main\resources\目录下添加bootstrap.yml和application.yml。
微服务启动时,优先加载bootstrap.yml文件,并从Nacos服务器中加载配置到本地。
2.6.1 bootstrap.yml
bootstrap.yml内容如下:
server:
port: 19090
servlet:
context-path: /rest
spring:
application:
# 微服务名称,从pom文件的artifactId标签取值
name: @artifactId@
cloud:
nacos:
# 服务发现,微服务名称,主机IP和端口,命名空间ID
discovery:
service: ${spring.application.name}
server-addr: localhost:8848
namespace: e8556e14-61e4-482b-b979-2230e00d1442
# 服务配置,主机IP和端口,命名空间ID,文件后缀,配置信息(数据ID,刷新方式,分组名称)
config:
server-addr: localhost:8848
namespace: e8556e14-61e4-482b-b979-2230e00d1442
file-extension: yaml
shared-configs:
- data-id: config-hub.yaml
refresh: true
group: DEFAULT_GROUP
hub:
microServiceUrl: http://example-201-nacos
3.微服务example-201-client-feign
3.1创建微服务工程
微服务工程名:example-201-client-feign。
3.2 pom.xml依赖
在pom.xml中引入核心依赖。包括spring-boot、spring-cloud、spring-cloud、nacos等。
org.springframework.boot
spring-boot-dependencies
${spring.boot.version}
pom
import
org.springframework.cloud
spring-cloud-dependencies
${spring.cloud.version}
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring.cloud.alibaba.version}
pom
import
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-starter-netflix-ribbon
org.springframework.cloud
spring-cloud-starter-loadbalancer
org.springframework.cloud
spring-cloud-starter-bootstrap
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-openfeign
3.3启动类
包名全路径:com.hub.example。
启动类名称:FeignExampleApplication。
注解@SpringBootApplication:代表FeignExampleApplication是微服务启动类。
注解@EnableDiscoveryClient:代表启用服务注册与发现。
注解@EnableFeignClients:代表启动Spring Cloud OpenFeign。
package com.hub.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FeignExampleApplication {
public static void main(String[] args) {
SpringApplication.run(FeignExampleApplication.class);
}
}
3.4业务类
3.4.1 Controller
包名全路径:com.hub.example.controller。
Controller类名称:FeignHubController。
注解@RestController、@RequestMapping、@PostMapping、@GetMapping :代表Spring Web发布RestFul请求服务的注解。
注解@Autowired:注入实例。
/**
* POST请求
* http://127.0.0.1:19091/feign/feignHub/getInfo
* 请求Json格式数据 {"cityName":"苏州","cityNo":"215000"}
*/
@Slf4j
@RestController
@RequestMapping("/feignHub")
public class FeignHubController {
@Autowired
private HubOpenFeignClient feignClient;
@PostMapping("/getInfo")
public ResultMap getInfo(@RequestBody CityVO cityVO) {
log.info("FeignHubController->getInfo接收cityVO = " + cityVO);
CityBO cityBO = new CityBO();
cityBO.setCityName(cityVO.getCityName());
cityBO.setCityNo(cityVO.getCityNo());
ResultMap resultMap = feignClient.getInfo(cityBO);
log.info("FeignHubController->getInfo返回resultMap = " + resultMap);
return resultMap;
}
}
3.4.2 HubOpenFeignClient接口
包名全路径:com.hub.example.feign。
接口名称:HubOpenFeignClient。
注解:@FeignClient,是Spring Cloud OpenFeign注解,配置OpenFeign客户端信息。其中,value的值是OpenFeign客户端需要调用的服务端的微服务名称,微服名称是注册到Nacos中的名称。
注解@ResponseBody、@RequestBody、@PostMapping是Spring Web的注解。
package com.hub.example.feign;
import com.hub.example.domain.CityBO;
import com.hub.example.domain.ResultMap;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
@FeignClient(contextId = "hubOpenFeignClient",
value = "example-201-nacos")
public interface HubOpenFeignClient {
@ResponseBody
@PostMapping("/center/hub/getInfo")
ResultMap getInfo(@RequestBody CityBO cityBO);
}
3.5配置类
无。
3.6配置文件
在\src\main\resources\目录下添加bootstrap.yml和application.yml。
微服务启动时,优先加载bootstrap.yml文件,并从Nacos服务器中加载配置到本地。
3.6.1 bootstrap.yml
bootstrap.yml内容如下:
server:
port: 19091
servlet:
context-path: /feign
spring:
application:
# 微服务名称,从pom文件的artifactId标签取值
name: @artifactId@
cloud:
nacos:
# 服务发现,微服务名称,主机IP和端口,命名空间ID
discovery:
service: ${spring.application.name}
server-addr: localhost:8848
namespace: e8556e14-61e4-482b-b979-2230e00d1442
# 服务配置,主机IP和端口,命名空间ID,文件后缀,配置信息(数据ID,刷新方式,分组名称)
config:
server-addr: localhost:8848
namespace: e8556e14-61e4-482b-b979-2230e00d1442
file-extension: yaml
shared-configs:
- data-id: config-hub.yaml
refresh: true
group: DEFAULT_GROUP
com.hub
example-200-entity
${hub.example.version}
4.2实体类
本例使用实体包括CityVO、CityBO、ResultMap。
4.2.1 CityVO类
CityVO,使用在对http请求入参的JSON格式数据封装。
import lombok.Data;
@Data
public class CityVO {
private String cityName;
private String cityNo;
}
4.2.2 CityBO类
CityBO,使用在对http请求入参的JSON格式数据封装。
import lombok.Data;
@Data
public class CityBO {
private String cityName;
private String cityNo;
}
4.2.3 ResultMap类
ResultMap使用在对http请求结果包装。可以便利的转换为JSON数据。
public class ResultMap extends HashMap {
public ResultMap() {
put("code", 0);
put("message", "success");
}
public static ResultMap error(int code, String msg) {
ResultMap resultMap = new ResultMap();
resultMap.put("code", code);
resultMap.put("msg", msg);
return resultMap;
}
}
五、Nacos应用
1.验证微服务注册
验证微服务注册,使用微服务example-201-nacos即可。
1.1启动Nacos
本例Nacos版本是2.1.0,在windows环境验证。
启动命令:startup.cmd -m standalone
1.2登录Nacos的Dashboard
在浏览器登录Nacos的Dashboard,从左侧导航栏进入菜单:服务管理/服务列表。可以看到注册服务为空。
1.3启动example-201-nacos微服务实例1
使用IntelliJ IDEA 2021.2.3启动example-201-nacos微服务,刷新Nacos的页面。与1.2比较,可以看出微服务有一个实例已经注册成功。
微服务名称:example-201-nacos。
微服务端口:18080。
1.4启动example-201-nacos微服务实例2
把example-201-nacos打包成一个可执行的jar包。启动example-201-nacos微服务,刷新Nacos的页面,可以看到已经有两个实例注册成功。
微服务名称:example-201-nacos。
微服务端口:18081。
1.5查看服务详情
在菜单:服务管理/服务列表页面,点击详情按钮,可以查看微服务下节点信息。
2.验证微服务配置
验证微服务注册,使用微服务example-201-nacos即可。
2.1启动Nacos
本例Nacos版本是2.1.0,在windows环境验证。
启动命令:startup.cmd -m standalone
2.2登录Nacos的Dashboard
在浏览器登录Nacos的Dashboard,从左侧导航栏进入菜单:配置管理/配置列表。可以看到配置信息。本例已经新建了config-hub.yaml配置。
2.3查看配置详细信息
点击详情,可以查看配置详细信息。
2.4启动example-201-nacos微服务实例1
使用IntelliJ IDEA 2021.2.3启动example-201-nacos微服务,刷新Nacos的页面。确认微服注册成功。
微服务名称:example-201-nacos
微服务端口:18080
2.5发起http请求获取配置信息
本例使用Postman工具发起http请求,该请求是一个Get请求,在微服务中已经实现。接收到返回结果。
2.6修改配置信息并发布
在Nacos修改配置信息并发布。把配置1改成配置2。发布成功后,可以看到Tomcat日志已经表名实时更新了最新发布的配置。
配置1:
hub:
msg: This is from Nacos config.
配置2:
hub:
msg: This is from Nacos config01.
2.7发起http请求获取配置信息
再次发起http请求获取配置信息。
3.验证微服务调用(RestTemplate)
使用RestTemplate作为微服务客户端。
全路径:org.springframework.web.client.RestTemplate。
3.1启动Nacos
启动命令:startup.cmd -m standalone
3.2登录Nacos
登录Nacos的Dashboard,在服务管理/服务列表查看服务注册情况。
3.3启动微服务
(1)启动微服务example-201-nacos,此微服务启动两个实例。比如使用IntelliJ IDEA启动一个实例,再打包一个可执行jar包启动一个实例。实例1:端口18080;实例2:端口18081。
(2)启动微服务example-201-client-rest,此微服务启动1个实例。实例:端口19090。
3.4使用Postman工具发请求
(1)请求URL
http://127.0.0.1:19090/rest/restHub/getInfo
(2)请求入参
{"cityName":"杭州","cityNo":"310000"}
(3)请求返回值:
{
"cityNo": "310000",
"code": 0,
"cityName": "杭州",
"randomUUID": "9b3237fc-45c8-4107-ae52-e7090c85ee1a",
"message": "success"
}
3.5请求链路解析
(1)使用Postman发起请求,调用微服务example-201-client-rest。
(2)微服务example-201-client-rest,使用RestTemplate客户端调用example-201-nacos微服务。
(3)微服务example-201-nacos在Nacos注册了2个实例。每次请求到来后,RestTemplate的根据服务名称去调用两个实例中的一个。
(4)微服务example-201-nacos接收到请求的实例,处理请求并返回结果给微服务example-201-client-rest。
(5)微服务example-201-client-rest,把结果返回给Postman。
4.验证微服务调用(OpenFeign)
使用Spring Cloud OpenFeign作为微服务客户端。
使用RestTemplate作为微服务客户端。
4.1启动Nacos
启动命令:startup.cmd -m standalone
4.2登录Nacos
登录Nacos,在服务管理/服务列表查看服务注册情况。
4.3启动微服务
(1)启动微服务example-201-nacos,此微服务启动两个实例。比如使用IntelliJ IDEA启动一个实例,再打包一个可执行jar包启动一个实例。实例1:端口18080;实例2:端口18081。
(2)启动微服务example-201-client-feign,此微服务启动1个实例。实例:端口19091。
4.4使用Postman工具发请求
(1)请求URL
http://127.0.0.1:19091/feign/feignHub/getInfo
(2)请求入参
{"cityName":"苏州","cityNo":"215000"}
(3)请求返回值:
{
"cityNo": "215000",
"code": 0,
"cityName": "苏州",
"randomUUID": "45f29635-d141-4581-892d-f9f23a221276",
"message": "success"
}
4.5请求链路解析
(1)使用Postman发起请求,调用微服务example-201-client-feign。
(2)微服务example-201-client-feign,使用Spring Cloud OpenFeign客户端调用example-201-nacos微服务。
(3)微服务example-201-nacos在Nacos注册了2个实例。每次请求到来后,OpenFeign根据服务名称去调用两个实例中的一个。
(4)微服务example-201-nacos接收到请求的实例,处理请求并返回结果给微服务example-201-client-feign。
(5)微服务example-201-client-feign,把结果返回给Postman。
以上,感谢。
2022年9月26日