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测试

posted @ 2022-12-01 19:54  hanease  阅读(89)  评论(0编辑  收藏  举报