spring-cloud-alibaba nacos

nacos 注册中心docker搭建


1.Clone 项目

使用docker 启动

git clone https://github.com/nacos-group/nacos-docker.git

启动方式支持多种

  •  单机模式 Derby

docker-compose -f example/standalone-derby.yaml up -d

  • MySQL5.7

docker-compose -f example/standalone-mysql-5.7.yaml up -d

  • MySQL8

docker-compose -f example/standalone-mysql-8.yaml up -d

这里使用mysql 8 来启动 

 

查看启动日志

docker-compose -f standalone-mysql-8.yaml logs -f

 

 

启动时docker service里会同时起mysql服务,nacos需要连接数据库 ,但是可能连接失败,需要down掉 再次up启动

docker-compose -f example/standalone-mysql-8.yaml down

启动成功后,浏览器换成自己的ip访问:

http://192.168.6.162:8848/nacos

账户 nacos 密码 nacos

spring-cloud-alibaba项目代码


nacos 服务注册与发现

基于官方文档Spring Cloud Alibaba Reference Documentation

1. 创建spring-cloud-alibaba

         项目地址:GitHub - liangzhe9/spring-cloud-alibaba at master

2. 创建spring-cloud-alibaba-dependencies 模块

        此模块只负责依赖包的引入和版本控制

        建议参照 spring.io 官网,上面有spring Cloud 与springboot 对应的版本,选择合适的版本

        Spring CloudLevel up your Java code and explore what Spring can do for you.https://spring.io/projects/spring-cloud

    这里选择springboot version:2.7.2

                  springCloud version:2021.0.3

                  springCloud alibaba version:2021.1

3.创建spring-cloud-alibaba-provider模块

      resource目录下创建application.yml

      

spring:
  application:
    # 服务名
    name: service-provider

  cloud:
    nacos:
      discovery:
        # 服务注册中心
        server-addr: 192.168.6.162:8848

server:
  port: 8070

# 端点健康检查
management:
  endpoints:
    web:
      exposure:
        include: "*"

4. 创建spring-cloud-alibaba-consumer模块

   resource目录下创建application.yml

spring:
  application:
    # 服务名
    name: service-consumer

  cloud:
    nacos:
      discovery:
        # 服务注册中心
        server-addr: 192.168.6.162:8848

server:
  port: 8071

# 端点健康检查
management:
  endpoints:
    web:
      exposure:
        include: "*"

Nacos feign 客户端


简介:

Feign 是一个声明式的伪http客户端,只需要创建一个接口并注解,具有可插拔的特性,

Feign默认集成了Ribbon,Nacos也很好的兼容了Feign,默认实现了负载均衡

pom.xml

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

Nacos Ribbon 默认采用轮询的负载均衡机制

常见负载均衡方式:

  • 轮询
  • 加权轮询
  • 最少连接数
  • 源IP 哈希

Nacos 配置中心


1.nacos 支持动态配置中心

nacos 版本2.1 使用mysql 8 启动,可能会添加配置失败,通过前端页面报错原因可以找到是nacos默认创建的mysql 缺少了字段:encrypted_data_key

在config_info 表和 his_config_info 表加入encrypted_data_key 字段即可

 

2.创建service-consumer-config.yaml

选项必须是yaml 后缀,否则会加载为properties,而且配置中不能出现注释代码

配置文件加载优先级:

bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml 

spring:
  application:
    name: service-consumer
  cloud:
    nacos:
      discovery:   
        server-addr: 192.168.6.129:8848  

server:
  port: 8080

management:
  endpoints:
    web:
      exposure:
        include: "*"       
user
  name: "test"

3. 引入pom 和 properties

pom.xml

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

##nacos 对properties 重写了,需要新增依赖才能引入配置文件
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

bootstrap.properties

spring.cloud.nacos.config.server-addr=192.168.6.162:8848
spring.application.name=service-consumer-config
spring.cloud.nacos.config.file-extension=yaml
spring.main.allow-circular-references=true

4.Nacos多环境配置

1. 普通启动通过profile 启动

java -jar 1.0.0-snapshot.jar --spring.profiles.acitve=prod

2. 创建service-provider-config.yaml 在nacos配置中心

spring:
  application:
    # 服务名
    name: service-consumer
  cloud:
    nacos:
      discovery:   
        #服务注册中心
        server-addr: 192.168.6.129:8848  
      config:
        server-addr: 192.168.6.129:8848

server:
  port: 8070

management:
  endpoints:
    web:
      exposure:
        include: "*"

3. 再创建service-provider-config-prod.yaml

端口号改为8071 用来区分

spring:
  application:
    # 服务名
    name: service-consumer
  cloud:
    nacos:
      discovery:   
        #服务注册中心
        server-addr: 192.168.6.129:8848  
      config:
        server-addr: 192.168.6.129:8848

server:
  port: 8071

management:
  endpoints:
    web:
      exposure:
        include: "*"

在spring boot application 配置中有active profies = prod !!!

报错的话,直接在IDE 启动的active 里面=prod spring.profiles.active=prod

回去找nacos上的配置中心 prod的配置文件yaml

发布时可能会存在配置文件报错,删掉配置中所有的注释启动 跳到target 目录下,通过java -jar *.jar --spring.profies.active=prod 启动尝试

Nacos Sentinel 分布式流量防卫兵


 1. 概述:

当其中一台服务出现故障,会访问涌入其他的服务, 造成雪崩效应,所以业界出现了 熔断器模型

Sentinel概述

Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。

Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景, 例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。

Sentinel核心分为两个部分:

  • 核心库(Java 客户端):能够运行于所有 Java 运行时环境,同时对Dubbo /Spring Cloud 等框架也有较好的支持。
  • 控制台(Dashboard):基于 Spring Boot 开发,打包后可以直接运行。

2. Sentinel 控制台

github 下载sentinel jar包

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.4.jar

账号:sentinel

密码:sentinel

3. yaml 引入sentinel

spring:
  application:
    name: service-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.6.162:8848
    sentinel:
      transport:
        enable: true
        port: 8720
        dashboard: localhost:8080     
server:
  port: 8076
feign:
  sentinel:
    enabled: true
management:
  endpoints:
    web:
      exposure:
        include: "*"
user:
  name: "hahahaha"

4. 注意

sentinel 1.8.4 会默认创建本地dashboard 占用8719端口,所以yaml中使用8720 端口

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值