微服务:一篇博客带你学会Nacos(服务注册、负载均衡、配置管理等)

nacos

阿里巴巴的技术推出的产品。
现在是springCloud中的组件,功能更加丰富。
可自行搜索下载。

  • 启动命令:
startup.cmd -m standalone

在这里插入图片描述

打开启动提供的地址,即可看到nacos页面。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

搭建

父工程引入管理依赖

            <!--nacos管理依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

在user-service和order-service中的pom文件中引入nacos-discovery依赖:

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

启动服务,打开nacos,即可看到服务已经注册上去了。

在这里插入图片描述

测试,正常使用

在这里插入图片描述

集群

一个服务可以有多个实例部署到不同的地方,同一地方的服务既可以称为一个集群。

微服务访问优先访问同一集群中的服务。(默认依然是轮询,需要配置负载均衡)

分级:

  • 一级是服务
  • 二级是集群
  • 三级就是实例

配置集群,user-service,yaml中添加cluster-name即可。

spring:
  application:
    name: userservice # 服务名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nocos服务地址
        cluster-name: BJ # 北京

多个user-service一个配置SH,一个配置BJ。

重启服务,nacos点进详请即可看到配置成功。

在这里插入图片描述

负载均衡

集群优先

优先选择本地集群服务,集群内随机。

yaml中配置即可

userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则

若集群内没有对应服务,则会跨集群访问,并报出警告(提示本地集群中的服务挂掉了)。

比如,现在一个order服务在BJ,两个user服务在BJ,一个user服务在SH,现在停掉BJ的两个user服务,然后调用order服务。

可以发现任可继续调用,不过是跨集群调用了(BJ的调用的SH的)。

在这里插入图片描述

权重优先

服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。

很简单啊,nacos中配置一下即可。
权重0 ~ 1; 为 0 永远不访问。

在这里插入图片描述

环境隔离

在这里插入图片描述

默认public
order 和 user 都在public下。
在这里插入图片描述

创建命名空间

在这里插入图片描述

配置

spring:
  application:
    name: orderservice
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: BJ
        namespace: 8c72b03a-e379-4290-b0c2-59a236922e25

在这里插入图片描述

此时order和User相互隔离,order无法调用user服务。

注册中心原理

在这里插入图片描述

配置管理

配置更改热更新
简单理解,就是进行统一的配置管理,方便且不用重启服务。

只把热更新需求的进行配置,其余不变的配置最好还是放在本地。

添加一个配置

在这里插入图片描述

在这里插入图片描述

发布:
在这里插入图片描述

在这里插入图片描述

配置拉取

  1. userservice中引入依赖:
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  1. 添加bootstrap.yaml文件

在这里插入图片描述

application.yaml中重复的配置可以注释掉。

验证是否配置成功

    @Value("${pattern.dateformat}")
    private String dateformat;

    /**
     * 读取nacos中配置,按格式返回当前时机
     * @return
     */
    @GetMapping("now")
    public String now() {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
    }

成功以我们配置的形式输出,说明nacos配置成功:

在这里插入图片描述

配置热更新

微服务无需重启就可以让nacos中的配置生效
两种方法

  1. @RefreshScope + @Value所在的类
@Slf4j
@RestController
@RefreshScope // 这个
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @Value("${Pattern.dateformat}")
    private String dateformat;

    /**
     * 读取nacos中配置,按格式返回当前时机
     * @return
     */
    @GetMapping("now")
    public String now() {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
    }
  1. @ConfigurationProperties 注入到对象中使用
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}

多环境配置共享

配置一个userservice.yaml不加环境,就属于共享配置,dev和test都可以加载到。
在这里插入图片描述

验证:

@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat; // dev环境中配置

    private String envSharedValue; // 共享环境中的配置 

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

在这里插入图片描述

可以发现都可以读取到,说明共享环境生效

如果dev或test或共享或本地 环境中有相同的配置,那么优先级为:
dev/test > 共享 > 本地

在这里插入图片描述

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cosmoshhhyyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值