前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud Alibaba(一) - Nacos 服务注册与发现,OpenFeign远程调用

SpringCloud Alibaba(一) - Nacos 服务注册与发现,OpenFeign远程调用

作者头像
化羽羽
发布2022-12-01 17:59:50
5350
发布2022-12-01 17:59:50
举报
文章被收录于专栏:化羽学Java化羽学Java

1、基础项目过目介绍

1.1 数据库创建

1.2 项目模块分布

1.3 测试http接口调用

1.3.1 http接口调用配置类
代码语言:javascript
复制
//http接口调用配置类
@Configuration
public class RestTemplateConfig {

    @Bean
    //@LoadBalanced //支持注册中心使用服务名调用,并支持负载均衡 
    //第一次测试先不加  @LoadBalanced 注解  
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

}
1.3.2 请求方法
代码语言:javascript
复制
@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依赖

代码语言:javascript
复制
<!--   nacos 依赖  三个服务都添加   -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.4 服务注册 配置

application.yml

代码语言:javascript
复制
# 服务到nacos注册中心
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

2.5 注解 @EnableDiscoveryClient

代码语言:javascript
复制
@EnableDiscoveryClient

2.6 测试http接口调用

2.6.0 查询服务注册情况
2.6.1 请求方法
代码语言:javascript
复制
//将站点请求换成,服务名请求(突然记得,负载均衡就是基于服务名请求作为基础的)
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 依赖

代码语言:javascript
复制
<!--    openfeign 远程调用    -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>2.1.1.RELEASE</version>
</dependency>

3.2 注解

代码语言:javascript
复制
//基本用法跟feign 差不多

//主启动类上的注解: 
@EnableFeignClients

//接口上的注解:  方法调用不再 赘述
@FeignClient(value = "kgcmall96-prod")
@FeignClient(value = "kgcmall96-user")

3.3 测试

测试方法不在赘述;

3.4 OpenFeign远程调用日志

3.4.1 全局日志
3.4.1.1 指定日志级别
代码语言:javascript
复制
# 指定日志级别,要配置在 远程调用的客户端,配合openFeign全局日志使用
logging:
  level:
    com.kgc.scda.service: debug
3.4.1.2 全局日志配置
代码语言:javascript
复制
/**
 * 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 局部配置注解 (比较麻烦不推荐)
代码语言:javascript
复制
@FeignClient(value = "kgcmall96-user",configuration = OpenFeignLogConfig.class)
3.4.2.3 测试
3.4.3 局部日志 配置文件方式
3.4.3.1 application.yml配置
代码语言:javascript
复制
# 局部日志配置方式2:在核心配置文件中,指定局部远程调用服务的日志级别,不需要全局配置类的支持,实现@FiegnClient 只用局部日志解耦
# 顶格写
feign:
  client:
    config:
      kgcmall96-prod:
        loggerLevel: FULL
#      kgcmall96-user:
#        loggerLevel: FULL
3.4.3.2测试
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、基础项目过目介绍
    • 1.1 数据库创建
      • 1.2 项目模块分布
        • 1.3 测试http接口调用
          • 1.3.1 http接口调用配置类
          • 1.3.2 请求方法
          • 1.3.3 测试结果
      • 2、Nacos 服务注册与发现
        • 2.1 单机 启动Nacos
          • 2.2 登录nacoe界面
            • 2.3 服务注册 nacos依赖
              • 2.4 服务注册 配置
                • 2.5 注解 @EnableDiscoveryClient
                  • 2.6 测试http接口调用
                    • 2.6.0 查询服务注册情况
                    • 2.6.1 请求方法
                    • 2.6.1 直接 测试结果
                    • 2.6.2 添加 @LoadBalanced 注解
                    • 2.6.3 再次测试
                    • 2.6.4 再次使用 http通过站点+端口 路径请求
                • 3、OpenFeign
                  • 3.1 依赖
                    • 3.2 注解
                      • 3.3 测试
                        • 3.4 OpenFeign远程调用日志
                          • 3.4.1 全局日志
                          • 3.4.2 局部日志 注解方式
                          • 3.4.3 局部日志 配置文件方式
                      相关产品与服务
                      负载均衡
                      负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档