Day9-SpringCloud alibaba服务注册与配置中心Nacos

学习自尚硅谷学习地址

欢迎━(`∀´)ノ亻!大家去一键三连 周阳老师讲的真的很好!!!!!!!🤣🤣🤣

[toc]

SpringCloud alibaba

服务限流降级:默认支持 Servlet、Feign、RestTemplate、Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。

服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。

分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。

消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。

阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。

分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。

Nacos

挑明说吧:Nacos = Config + Eruka

image-20220104162920176

(Nacos支持 AP + CP )

单机下载安装运行Nacos

玩就玩最新的: 最新的点我下载 (2.0.3目前)

  • Linux 下载tar.gz

  • 本机需要有jdk8环境 并且配置好了环境变量

  • 导入一下Nacos自带的mysql数据库

  • image-20220104164002601

  • 导入完成后去application.properties 去配置属性(提一嘴 这个应该是SpringBoot项目的主配置文件)

  • image-20220104164205270配置端口和你刚刚的数据库

  • 切换到Nacos的bin目录 单机启动命令: sh startup.sh -m standalone

  • 默认访问地址:http:/ip:8848/nacos 需放行8848端口 (8848钛金手机~🤣🤣🤣)

看看运行效果图:

image-20220104163813737

image-20220104163849323

默认账号密码: nacos nacos

image-20220104164322183

搭建好啦~

消费端和服务端分别注册进 Nacos

消费端

  • 导入依赖:

    父pom中设置版本号

                <!--spring cloud alibaba 2.1.0.RELEASE-->
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                    <version>2.1.0.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
    

    子包pom:

            <!--SpringCloud ailibaba nacos -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
    
  • yaml 配置 注册中心地址:

    server:
      port: 83
    
    
    spring:
      application:
        name: nacos-order-consumer
      cloud:
        nacos:
          discovery:
            server-addr: # 你的服务器地址:8848
    
    
    #消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
    service-url:
      nacos-user-service: http://nacos-payment-provider
    
    
    
  • 配置负载均衡

    ApplicationContextConfig.java

    package com.atguigu.springcloud.alibaba.config;
    
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.client.RestTemplate;
    
    @Configuration
    public class ApplicationContextConfig
    {
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate()
        {
            return new RestTemplate();
        }
    }
    
    
  • 主测试Controller

    package com.atguigu.springcloud.alibaba.controller;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    import javax.annotation.Resource;
    
    @RestController
    @Slf4j
    public class OrderNacosController
    {
        @Resource
        private RestTemplate restTemplate;
    
        @Value("${service-url.nacos-user-service}")  //这里是配置文件yaml的属性
        private String serverURL;
    
        @GetMapping(value = "/consumer/payment/nacos/{id}")
        public String paymentInfo(@PathVariable("id") Long id)
        {
            return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
        }
    
    }
    

服务端

服务端与消费端区别不大

唯一区别可能在yaml配置

server:
  port: 9001

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr:  #配置Nacos地址

# 暴露监控端口
management:
  endpoints:
    web:
      exposure:
        include: '*'


## 这里没有指向 表示即服务提供者

服务端Controller

package com.atguigu.springcloud.alibaba.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PaymentController
{
    @Value("${server.port}")
    private String serverPort;

    @GetMapping(value = "/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id)
    {
        return "nacos registry, serverPort: "+ serverPort+"\t id"+id;
    }
}

好了 我们运行运行玩一玩

首先偷一张官网的图

image-20220104170404062

基本流程就是上图了 我们来测试一下

服务端自我调用一下

image-20220104170513262

现在客户端调用一下服务端

image-20220104170615611

调用成功:(服务列表中显示 客户端服务端都被注册进来了)

image-20220104170643933

Nacos作为服务配置中心

食用步骤—基础配置

  • 导入pom.xml

            <!--nacos-config-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            </dependency>
            <!--nacos-discovery-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
    
  • 创建bootstrapapplication .yml

application.yml

spring:
  profiles:
    active: dev # 表示开发环境
    #active: test # 表示测试环境
    #active: info

bootstrap.yml

# nacos配置
server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr:  #Nacos服务注册中心地址
      config:
        server-addr:  #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
#        group: DEV_GROUP 
#        namespace: 7d8f0f5a-6a53-4785-9686-dd460158e5d4


# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# nacos-config-client-dev.yaml

# nacos-config-client-test.yaml   ----> config.info
  • 主启动类

    package com.atguigu.springcloud.alibaba;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @EnableDiscoveryClient
    @SpringBootApplication
    public class NacosConfigClientMain3377
    {
        public static void main(String[] args) {
            SpringApplication.run(NacosConfigClientMain3377.class, args);
        }
    }
    
    
  • 自动刷新配置: 通过SpringCloud原生注解 @RefreshScope实现Nacos的动态刷新

    Controller

    package com.atguigu.springcloud.alibaba.controller;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @auther zzyy
     * @create 2020-02-23 17:02
     */
    @RestController
    @RefreshScope //支持Nacos的动态刷新功能。
    public class ConfigClientController
    {
        @Value("${hello}")
        private String configInfo;
    
        @GetMapping("/hello")
        public String getConfigInfo() {
            return configInfo;
        }
    }
    
    
  • 在Nacos注册中心面板上新建一个名为:nacos-config-client-dev.yml的配置文件

    image-20220104171954858

  • 试试吧!跑起来看看效果

  • 支持动态刷新

  • image-20220104172142535


食用步骤—分类配置

  • 问题引出

    问题1:

    实际开发中,通常一个系统会准备

    dev开发环境

    test测试环境

    prod生产环境。

    如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?

    问题2:

    一个大型分布式微服务系统会有很多微服务子项目,

    每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境…

    那怎么对这些微服务配置进行管理呢?

  • image-20220104172516235

image-20220104172530201

  • 默认三层定位唯一的配置文件:NameSpace + Group + DataID 从大到小

  • 默认情况:

    Namespace=public,Group=DEFAULT_GROUP, 默认Cluster是DEFAULT

image-20220104172844023

image-20220104173041204

三种分层方案大家可自行尝试~ 下一篇Nacos集群见😉😉

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值