springcloud组件学习

学习背景与准备

在简单的电商环境下,搭建spring cloud alibaba项目,并学习nacos注册发现及配置、等功能。

Nacos服务发现

cloud项目搭建

导入依赖,包括cloud及cloud aliaba,首先是父工程:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
    </parent>

然后是cloud和alibaba cloud的依赖:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR9</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

版本的选择:Hoxton.SR9与2.2.5.RELEASE。

nacos服务注册发现初试

①加依赖:仍在总pom文件中导入以下依赖。

<!--        引入nacos服务发现依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

②加注解:在服务提供方和消费方的启动类增加@EnableDiscoveryClient注解。在服务消费方的启动类中增加@LoadBalancer注解,表示启动ribbon。

@SpringBootApplication
@EnableDiscoveryClient
public class OrderApplication {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class);
    }

}

③加配置。要为当前服务设置注册地址、注册名称等。在yaml配置文件中展开。

server:
  port: 8000

spring:
  cloud:
    nacos:
      discovery:
        service: order-srv
      server-addr: localhost:8848

上述配置的服务名称为order-srv,端口为8000。

④写代码。在消费端写代码对服务方继续调用。

    @Resource
    private RestTemplate restTemplate;

    @GetMapping("/order/create")
    public String createOrder(@PathParam("productId") Integer productId , @PathParam("userId")Integer userId){
        String res = restTemplate.getForObject("http://store-srv/store/{productId}", String.class, productId);
//        String res = restTemplate.getForObject("http://localhost:8081/store/{productId}", String.class, productId);

        return "用户为" + productId + ",产品为" + userId + res;
    }

大功告成!测试成功!

nacos配置项

配置项表示工程的yaml文件或properties文件,待上线的项目可能处于不同的运行环境,如数据库选择不同等,这时就需要灵活配置。nacos提供了yaml文件生效的场景,可以将配置文件与jar包分隔开来,基本操作如下所示:

①增加依赖:

    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

②为当前服务设置dataId等配置:

spring:
  application:
    name: demotest
  cloud:
    nacos:
      discovery:
        service: demo-srv
      config:
        server-addr: localhost:8848
        file-extension: yaml

这其中,name表示该服务的工程名,对应nacos中dataId值。

此外,要实现配置的类似热部署功能,需要在Controller类上增加@RefreshScope注解。

nacos注解的动态配置

这里设置一个情境,即同一个工程项目有开发dev、测试test、生产produce环境。那就需要多种配置文件。在nacos中,需要配置相应的dataid,命名规则为:工程名-运行环境.支持的文件拓展名,需要与项目工程中的实际配置保持一致。

如果要使用通用配置文件,则dataId中去掉文件拓展名即可。注意,通用配置的优先级低于其他三种,如下图。 

共享配置:在配置文件中添加shared-configs属性,或者extension-configs。

nacos动态监听的长轮询机制原理

 服务端会向nacos客户端注册信息,此处动态监听是指nacos客户端会监听服务端的配置信息,当配置信息发生改变时,会及时更新。其长轮询的动态更新机制如下:nacos客户端发出请求(pull拉),服务端会在30秒内给出回应,回应的触发事件为:若配置发生变化,则返回需要更新的打他Id、group,客户端拿到变更的groupKey后,再根据groupKey去获取配置项的最新值配置信息;否则超时30秒后直接返回。

 Nacos领域模型

Nacos架构

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值