微服务技术栈-Nacos配置管理和Feign远程调用

这篇具有很好参考价值的文章主要介绍了微服务技术栈-Nacos配置管理和Feign远程调用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

在上篇文章中介绍了微服务技术栈中Nacos这个组件的概念,Nacos除了可以做注册中心,同样可以做配置管理来使用。同时我们将学习一种新的远程调用方式Feign,它可以帮助我们优雅的实现http请求的发送。


一、统一配置管理

1.添加配置文件

Nacos除了可以做注册中心,同样可以做配置管理来使用。每个微服务可以从Nacos拉取相关配置,同时当Nacos中的配置发生变化的时候,可以及时通知到每个微服务。
nacos feign调用,微服务,微服务,架构,云原生

Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新
1.添加配置文件的方法,在配置管理右边点击加号按钮。
nacos feign调用,微服务,微服务,架构,云原生
2.弹出的表单中,填写配置信息:
1.Data ID:[服务名称]-[profile].[后缀名]
2.Group:分组默认即可
nacos feign调用,微服务,微服务,架构,云原生
注意:需要热更新的配置(核心配置)才有放到nacos管理的必要,基本不会变更的一些配置还是保存在微服务本地比较好。

微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。因此spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之前被读取,流程如下:
nacos feign调用,微服务,微服务,架构,云原生

2.微服务拉取配置

接下来演示一下从微服务拉取配置:
1)引入nacos-config依赖

<!--nacos配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2)添加bootstrap.yaml

nacos feign调用,微服务,微服务,架构,云原生
3)读取nacos配置(热更新)
@Value注解可以帮助我们从配置文件中读取属性的值,在这里我们使用一个@ConfigurationProperties注解代替@Value注解。在user-service服务中,添加一个类,读取patterrn.dateformat属性。

@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}

在UserController中直接使用@Autowired注解注入这个类即可使用。

    @Autowired
    private PatternProperties patternProperties;

    @GetMapping("/now")
    public PatternProperties now(){
        return patternProperties;
    }

3.配置共享

其实微服务启动时,会去nacos读取多个配置文件,例如:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml,userservice-test.yaml
  • [spring.application.name].yaml,例如:userservice.yaml

[spring.application.name].yaml不包含环境,因此可以被多个环境共享,不管是dev,还是test环境,都可以读到userservice.yaml中的配置信息。
nacos feign调用,微服务,微服务,架构,云原生

当nacos、服务本地同时出现相同属性时,优先级有高低之分,遵循一个原则:nacos优先,本地随后。
nacos feign调用,微服务,微服务,架构,云原生


三、Feign远程调用

以前利用RestTemplate发起远程调用的代码:

String url="http://userservice/user/"+order.getUserId();
User user = restTemplatel.getForObject(url, User.class);

缺点:代码可读性差,编程体验不统一,代码里面出现url,还要手动维护参数。

Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign

什么是声明式:声明式编程是一种编程范式,它指定程序应该做什么,而不具体说明怎么做。

Feign的作用就是帮助我们优雅的实现http请求的发送。接下来我们来动手实践使用Feign替代RestTemplate帮助我们发送请求。
1)引入依赖:在order-service服务的pom文件中引入feign的依赖。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2)添加注解:在order-service的启动类添加@EnableFeignClients注解开启Feign的功能。
nacos feign调用,微服务,微服务,架构,云原生

3)编写Feign的客户端
将Feign的Client抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用。
1.在父工程中,首先创建一个module,命名为feign-api。
nacos feign调用,微服务,微服务,架构,云原生

2.在feign-api中然后引入feign的starter依赖。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

3.在feign-api中编写UserClient(不要忘记把User也拿到该模块里面来)。

@FeignClient("userservice")
public interface UserClient {
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id")Long id);
}

4.在order-service中使用feign-api(不要忘记在opom文件中中引入自己创建的feign-api模块)

<dependency>
    <groupId>cn.itcast.demo</groupId>
    <artifactId>feign-api</artifactId>
    <version>1.0</version>
</dependency>

5.在OrderService中直接注入feign-api中的UserClient,注入完直接使用即可。

@Service
public class OrderService {

    @Autowired
    private UserClient userClient;
    
    public Order queryOrderById(Long orderId) {
        //1.查询订单
        Order order = orderMapper.findById(orderId);
        //2.查询用户
        User user = userClient.findById(order.getUserId());
        order.setUser(user);
        //3.返回
        return order;
    }
}

6.启动测试,在启动时会直接报错,因为UserClient现在在cn.itcast.feign.clients包下,而order-service的@EnableFeignClients注解是在cn.itcast.order包下,不在同一个包,无法扫描到UserClient。

解决方法:修改order-service的@EnableFeignClients注解,指定Feign应该扫描的包。

@EnableFeignClients(basePackages = "cn.itcast.feign.client")

修改完注解后,重启服务,在查询订单的同时就可以把用户的信息同时查询了出来,即使用Feign替代RestTemplate帮助我们发送请求。


总结

本章介绍了Nacos配置管理和Feign远程调用,对于哪些配置需要在Nacos中进行管理,哪些需要写到本地还需要根据不同的业务要求来,没有统一的标准。Feign可以帮助我们更加优雅的实现http请求的发送,且代码维护起来更容易。文章来源地址https://www.toymoban.com/news/detail-782777.html


到了这里,关于微服务技术栈-Nacos配置管理和Feign远程调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Cloud Day2 Nacos配置管理、Feign远程调用与Gateway服务网关

    Nacos除了可以做注册中心,同样可以做配置管理来使用。 当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。 Nacos一方面可以将配置集中管理,另一方可以

    2024年02月10日
    浏览(51)
  • 微服务Day3——Nacos配置管理\Feign远程调用\Gateway网关

    当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。 Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。

    2024年02月16日
    浏览(35)
  • Nacos配置管理、Fegin远程调用、Gateway服务网关

    Nacos除了可以做注册中心,同样可以做配置管理来使用。 当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。 Nacos一方面可以将配置集中管理,另一方可以

    2024年02月03日
    浏览(30)
  • SpringCloud Alibaba(一)微服务简介+Nacos的安装部署与使用+Nacos集成springboot实现服务注册+Feign实现服务之间的远程调用+负载均衡+领域划分

    目录 一.认识微服务 1.0.学习目标 1.1.单体架构 单体架构的优缺点如下: 1.2.分布式架构 分布式架构的优缺点: 1.3.微服务 微服务的架构特征: 1.4.SpringCloud 1.5Nacos注册中心 1.6.总结 二、Nacos基本使用安装部署+服务注册 (一)linux安装包方式单节点安装部署 1. jdk安装配置 2. na

    2024年02月09日
    浏览(36)
  • Nacos整合Feign远程调用

    Feign是一个声明式的http客户端,其作用就是帮助我们优雅的实现http请求的发送。 将Feign的Client抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用。 例如,将UserClient、User、Feign的默认配置都抽取到一个feign-api包中,所有微服务

    2024年02月10日
    浏览(26)
  • 微服务入门 | 项目分割 | 远程调度Feign | 用户中心erueka 和 nacos

    单体架构:所有功能集中在一个项目中开发,打成一个包部署 分布式架构:就是各功能模块的代码不在同一个项目中写了,到时候修改其中一个过能的代码,对另一个功能完全没有任何影响(如果在一个项目中,修改这个功能的代码,就得将所有功能代码给重新编译) 问题

    2024年01月18日
    浏览(31)
  • 【SpringCloud Alibaba】Nacos服务管理与Feign负载均衡

    目录 一、微服务搭建 1.1 服务提供者与服务消费者 1.2 依赖关系   二、服务注册与负载均衡使用 2.1 Nacos 实现服务的注册与发现 2.2 Loadbalancer负载均衡、Feign声明式服务调用 2.3 示例综合实现 2.3.1 服务注册与发现测试 2.3.2 负载均衡测试  服务提供者 服务的被调用方(即:为其他微

    2024年02月03日
    浏览(37)
  • 【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡)

    微服务完整的技术栈如图: 技术栈学习: 概念: 在Eureka架构中,微服务角色有两类EurekaServer: 服务端,注册中心 记录服务信息 心跳监控 EurekaClient:客户端 Provider:服务提供者,例如案例中的user-service注册自己的信息到EurekaServer;每隔30秒向EurekaServer发送心跳 consumer:服务消

    2024年02月12日
    浏览(31)
  • nacos不同局域网如何相互调用?nacos微服务云开发,远程联调部署,内网穿透,frp部署

    最近每个人都在家办公,公司项目是微服务的,一个人负责一个小服务,而且每个人都不在同一个局域网内,公司有一个云服务器(部署nacos),一开始大家都把自己负责的服务都注册到nacos上(作为服务注册和服务发现已经配置中心),大家都能注册,当前端人员来联调的时

    2023年04月17日
    浏览(26)
  • 【SpringBoot集成Nacos+Dubbo】企业级项目集成微服务组件,实现RPC远程调用

    在日益增长的业务需求中,一开始使用的是每个项目独立开发,虽然都是前后端分离的项目,但是每一个项目之间互不干扰。后来,因为某种需求,需要几个项目的数据相互交错获取。 最开始的想法就是集成多个数据源。 举例 有A、B、C三个项目,对应着数据库DBa、DBb、DBc、

    2024年02月04日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包