【java、微服务、nacos】nacos学习笔记

Nacos服务分级存储模型

① 一级是服务,例如userservice

②二级是集群,例如杭州或上海

③ 三级是实例,例如杭州机房的某台部署了userservice的服务器

配置实例集群属性

改变服务的yml文件

spring:
  cloud:
    nacos:
      discovery:
        cluster-name: HZ

NacosRule负载均衡

在调用模块的yml中添加

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

根据权重负载均衡

环境隔离(namespace)

配置管理

配置更改热更新

统一配置管理:

步骤:

1.引入依赖

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

2.在服务模块添加bootstrap.yml(优先级高于application. yml)

spring:
  application:
    name: userservice
  profiles:
    active: dev
  cloud:
    nacos:
      server-addr: localhost:8848
      config:
        file-extension: yaml

执行步骤:项目启动-》读取nacos中配置文件(以bootstrap.yml为引导)-》读取本地配置文件application.yml-》创建spring容器-》加载bean

配置热更新

方法一:在@Value注入的变量所在类上添加注解@RefreshScope

@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController {
}

方法二:使用@ConfigurationProperties注解

package cn.itcast.user.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * PatternProperties
 *
 * @author huang
 * @package cn.itcast.user.config
 * @since 2024/3/1 19:36
 */
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dataformat;
}

之后要用自动装配把PatternProperties实例对象自动加载到要使用的地方 

多环境配置共享

Data Id为服务名就是多环境配置共享

如果要分开发和发布环境,要加上-dev或-test之类的

配置优先级:服务名-profile.yaml >服务名称yaml>本地配置

配置临时实例

  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        ephemeral: false

搭建Nacos集群

步骤:

  1. 搭建MySQL集群并初始化数据库表
  2. 下载解压nacos
  3. 修改集群配置(节点信息)、数据库配置
  4. 分别启动多个nacos节点
  5. nginx反向代理

Feign远程调用

Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign,其作用就是帮助我们优雅的实现http请求的发送

基于robbin实现负载均衡

步骤

1. 引入依赖:

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


2. 在order-service的启动类添加注解开启Feign的功能:
 

@EnableFeignClients
@MapperScan("org.example.nacos.mapper")
@SpringBootApplication
public class NacosApplication {

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

}

 3. 编写clientsr包中feign客户端

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

 4. 直接用Fegin替代RestTemplate

自定义配置

可以通过配置文件application.yml

类型作用说明
feign.Logger.Level修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULL
feign.codec.Decoder响应结果的解析器http远程调用的结果做解析,例如解析json字符串为java对象
feign.codec.Encoder请求参数编码将请求参数编码,便于通过http请求发送
feign.Contract支持的注解格式默认是SpringMVC的注解
feign.Retryer失败重试机制请求失败的重试机制,默认是没有,不过会使用Ribbon的重试

性能优化

Feign底层的客户端实现:

URLConnection:默认实现,不支持连接池

Apache HttpClient:支持连接池

OKHttp:支持连接池

方法一 使用连接池

application.yml

feign:
  client:
    config:
      default:
        logger-level: BASIC
  httpclient:
    enabled: true
    max-connections: 200
    max-connections-per-route: 50

方法二 日志级别降低

Gateway网关

网关功能:

身份认证和权限校验

服务路由、负载均衡

请求限流

SpringCloudGateway

而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。

zuul

Zuul是基于Servlet的实现,属于阻塞式编程。

搭建网关服务的步骤:

1. 创建新的module,引入SpringCloudGateway的依赖和nacos的服务发现依赖

2. 编写路由配置及nacos地址

路由配置包括:

1.路由id:路由的唯一标示

2.路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡

3.路由断言(predicates):判断路由的规则,

4.路由过滤器(filters):对请求或响应做处理

server:
  port: 10010 # 网关端口
spring:
  application:
    name: gateway # 服务名称
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos
    gateway:
      routes: 
        - id: user-service
          uri: lb://userservice # 负载均衡
          predicates:
            - Path=/user/**

路由断言工厂

看开发者文档

过滤器工厂

看开发者文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

岩塘

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

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

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

打赏作者

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

抵扣说明:

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

余额充值