-
SpringCloud Alibaba(一) - Nacos 服务注册与发现,OpenFeign远程调用
1、基础项目过目介绍
1.1 数据库创建
1.2 项目模块分布
1.3 测试http接口调用
1.3.1 http接口调用配置类
//http接口调用配置类
@Configuration
public class RestTemplateConfig {
@Bean
//@LoadBalanced //支持注册中心使用服务名调用,并支持负载均衡
//第一次测试先不加 @LoadBalanced 注解
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
1.3.2 请求方法
@Slf4j
@RestController
public class KgcMallOrderController {
@Autowired
private RestTemplate restTemplate;
/**
* @author : zhukang
* @param : [java.lang.Integer, java.lang.Integer]
* @return : com.kgc.scda.bean.KgcMallOrder
* @description : 模拟用户下单
*/
@GetMapping("/createOrder")
public KgcMallOrder createOrder(@RequestParam Integer uid, @RequestParam Integer pid){
log.info("------ 用户编号:{},商品编号:{},模拟下单", uid, pid);
// 查询用户详情
KgcMallUser mallUser = restTemplate.getForObject("http://localhost:9602/mallUser?uid=" + uid, KgcMallUser.class);
// 查询商品详情
KgcMallProduct mallProduct = restTemplate.getForObject("http://localhost:9603/mallProduct?pid=" + pid, KgcMallProduct.class);
// 封装订单实体,入库
KgcMallOrder mallOrder = KgcMallOrder.builder()
.userId(mallUser.getId())
.userName(mallUser.getUserName())
.prodId(mallProduct.getId())
.prodName(mallProduct.getProdName())
.totalPrice(mallProduct.getProdPrice())
.build();
// 调用订单业务接口,插入订单
kgcMallOrderService.saveMallOrder(mallOrder);
log.info("------ 用户编号:{},商品编号:{},下单成功", uid, pid);
// 返回订单详情
return mallOrder;
}
}
1.3.3 测试结果
2、Nacos 服务注册与发现
2.1 单机 启动Nacos
startup.cmd -m standalone
2.2 登录nacoe界面
用户名:nacos
密码:nacos
2.3 服务注册 nacos依赖
<!-- nacos 依赖 三个服务都添加 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.4 服务注册 配置
application.yml
# 服务到nacos注册中心
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
2.5 注解 @EnableDiscoveryClient
@EnableDiscoveryClient
2.6 测试http接口调用
2.6.0 查询服务注册情况
2.6.1 请求方法
//将站点请求换成,服务名请求(突然记得,负载均衡就是基于服务名请求作为基础的)
KgcMallUser mallUser = restTemplate.getForObject("http://kgcmall96-user/mallUser?uid=" + uid, KgcMallUser.class);
KgcMallProduct mallProduct = restTemplate.getForObject("http://kgcmall96-prod/mallProduct?pid=" + pid, KgcMallProduct.class);
2.6.1 直接 测试结果
2.6.2 添加 @LoadBalanced 注解
2.6.3 再次测试
2.6.4 再次使用 http通过站点+端口 路径请求
请求失败,说明使用 @LoadBalanced 注解后,RestTemplate 不能再使用站点+端口的方式请求。
3、OpenFeign
3.1 依赖
<!-- openfeign 远程调用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
3.2 注解
//基本用法跟feign 差不多
//主启动类上的注解:
@EnableFeignClients
//接口上的注解: 方法调用不再 赘述
@FeignClient(value = "kgcmall96-prod")
@FeignClient(value = "kgcmall96-user")
3.3 测试
测试方法不在赘述;
3.4 OpenFeign远程调用日志
3.4.1 全局日志
3.4.1.1 指定日志级别
# 指定日志级别,要配置在 远程调用的客户端,配合openFeign全局日志使用
logging:
level:
com.kgc.scda.service: debug
3.4.1.2 全局日志配置
/**
* Created On : 24/11/2022.
* <p>
* Author : huayu
* <p>
* Description: OpenFeign 全局日志配置类
*/
@Configuration //全局日志配置,如果使用@FeignClient(value = "kgcmall96-user",configuration = OpenFeignLogConfig.class)的局部日志,全局配置就不可以使用
public class OpenFeignLogConfig {
/**
* @author : huayu
* @date : 24/11/2022
* @param : []
* @return : feign.Logger.Level
* @description : openFeignLogLevel
*/
@Bean
public Logger.Level openFeignLogLevel(){
//适用于开发测试中,记录接口远程调用的全部日志
return Logger.Level.FULL;
}
}
3.4.3.3 测试
3.4.2 局部日志 注解方式
3.4.2.1 使用局部日志后,全局日志需要关闭
3.4.2.2 局部配置注解 (比较麻烦不推荐)
@FeignClient(value = "kgcmall96-user",configuration = OpenFeignLogConfig.class)
3.4.2.3 测试
3.4.3 局部日志 配置文件方式
3.4.3.1 application.yml配置
# 局部日志配置方式2:在核心配置文件中,指定局部远程调用服务的日志级别,不需要全局配置类的支持,实现@FiegnClient 只用局部日志解耦
# 顶格写
feign:
client:
config:
kgcmall96-prod:
loggerLevel: FULL
# kgcmall96-user:
# loggerLevel: FULL
3.4.3.2测试
出处:https://www.cnblogs.com/xiaoqigui/p/16925421.html
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式