3.Spring Cloud (Hoxton.SR8) 学习笔记—Nacos微服务治理、Nacos配置管理、Feign远程调用

本文目录如下:

  • 一、Nacos微服务治理
    • Nacos 下载 与 启动
    • Spring Cloud 集成 Nacos
    • IDEA 同一个 Application 启动多次
    • Nacos - 配置集群
    • Nacos - 设置负载均衡
    • Nacos - 设置服务实例的权重
  • 二、Nacos 配置管理
    • Nacos - 合理的把配置信息迁移到 Nacos 中
    • Nacos - 如何使用 Nacos 配置?
    • Nacos 配置文件命名
  • 三、Feign 远程调用
    • 定义和使用 Feign 客户端 (Client)
    • 自定义 Feign 配置 (Configuration)
    • 规范的使用 Feign 进行远程调用 (整合公有模块)

一、Nacos微服务治理

Nacos 下载 与 启动

https://github.com/alibaba/nacos/releases

Nacos 下载与启动:

  • F:\ProgramFiles\nacos\bin> .\startup.cmd -m standalone

启动成功:
3.Spring Cloud (Hoxton.SR8) 学习笔记—Nacos微服务治理、Nacos配置管理、Feign远程调用_第1张图片


Spring Cloud 集成 Nacos

  • 父项目 引入 管理依赖

<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-alibaba-dependenciesartifactId>
    <version>${cloud-alibabba.version}version>
    <type>pomtype>
    <scope>importscope>
dependency>
  • 子模块 添加 客户端依赖

<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>


<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
  • 子模块bootstrap.xml 中添加 配置信息
spring:
  application:
    name: user-server #应用名
  profiles:
    active: dev # 环境
  cloud:
    nacos:
      username: nacos
      password: nacos
      server-addr: 127.0.0.1:8848   # nacos服务地址
      config:
        file-extension: yaml # 文件后缀名
#      discovery:
#        cluster-name: XQZ # 配置集群名称,也就是机房位置,例如:HZ,杭州
  • 启动两个模块, 在Nacos中查看模块注册情况

3.Spring Cloud (Hoxton.SR8) 学习笔记—Nacos微服务治理、Nacos配置管理、Feign远程调用_第2张图片

IDEA 同一个 Application 启动多次

UserApplication 启动多次, 模拟多实例部署,但为了避免 端口冲突,需要修改端口设置:
添加 VM Option: -Dserver.port=8192
3.Spring Cloud (Hoxton.SR8) 学习笔记—Nacos微服务治理、Nacos配置管理、Feign远程调用_第3张图片

启动之后, 在 Nacos 中可以看到 同一个服务的 两个实例:
3.Spring Cloud (Hoxton.SR8) 学习笔记—Nacos微服务治理、Nacos配置管理、Feign远程调用_第4张图片


Nacos - 配置集群

spring:
  cloud:
    nacos:
      discovery:
        cluster-name: XQZ # 配置集群名称,也就是机房位置,例如:HZ,杭州

Nacos - 设置负载均衡

@SpringBootApplication
@MapperScan("com.tencent.wechat.user.mapper")
public class TencentWechatUserApplication {

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

    /**
     * 开启负载均衡
     * @return
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    /**
     * Spring Cloud 自带的负载均衡组件: Ribbon
     * @return
     */
    @Bean
    public IRule randomRule() {
        return new RandomRule();
    }

}

yml 中添加:

# 设置负载均衡的IRule为 NacosRule,这个规则优先会寻找与自己同集群的服务
user-server:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则

Nacos - 设置服务实例的权重

3.Spring Cloud (Hoxton.SR8) 学习笔记—Nacos微服务治理、Nacos配置管理、Feign远程调用_第5张图片


二、Nacos 配置管理

Nacos - 合理的把配置信息迁移到 Nacos 中

  • 配置信息 迁移到 Nacos 的主要原因是: 能让配置信息 热更新
  • 所以不常改变的 配置 (如 MySQL连接信息) 就没有必要放入到 Nacos 中, 放入 开关类型 的配置。

Nacos - 如何使用 Nacos 配置?

  • 1.在 Nacos 上创建依赖文件
    3.Spring Cloud (Hoxton.SR8) 学习笔记—Nacos微服务治理、Nacos配置管理、Feign远程调用_第6张图片
app-settings:
  name: xqz
  age: 18
  hobby: 烘焙蛋糕
  edu_school: 南京医科大学
  • 2.Spring Cloud 子模块中引入依赖

<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
  • 3.项目中创建 bootstrap.yml 文件

bootstrap.yml 是一个 引导文件, 优先级大于 application.yml, 一定要包含下面这些内容。

spring:
  application:
    name: user-server #应用名
  profiles:
    active: dev # 环境
  cloud:
    nacos:
      username: nacos
      password: nacos
      server-addr: 127.0.0.1:8848   # nacos服务地址
      config:
        file-extension: yaml # 文件后缀名
      discovery:
        cluster-name: XQZ # 配置集群名称,也就是机房位置,例如:HZ,杭州
  • Nocos 上查看配置文件
    3.Spring Cloud (Hoxton.SR8) 学习笔记—Nacos微服务治理、Nacos配置管理、Feign远程调用_第7张图片

Nacos 配置文件命名

  • [服务名]-[profile].yaml: 环境特有 配置文件
  • [服务名].yaml: 多环境共享 配置文件

三、Feign 远程调用

定义和使用 Feign 客户端 (Client)

  • 1.在 公有模块(Common) 中引入 openfeign依赖

<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
  • 2.在子模块启动类上添加 @EnableFeignClients注解 开启 Feign 的功能
@SpringBootApplication
@MapperScan("com.tencent.wechat.user.mapper")
@EnableFeignClients
public class TencentWechatUserApplication {

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

	// ...
	
}
  • 3.编写 Feign 客户端
// 远程调用
@FeignClient(value = "blog-server")
public interface BlogServerClient {

    @PostMapping("/blog/Blog/getAllBlog")
    ResultData getAllBlog();

}
  • 4.Controller 中注入并使用 Feign 客户端
@Autowired
BlogServerClient blogServerClient;

@PostMapping("getAllBlog")
public ResultData getAllBlog() {
    return blogServerClient.getAllBlog();
}

自定义 Feign 配置 (Configuration)

public class DefaultFeignConfiguration {

    @Bean
    public Logger.Level feignlogLevel() {
        return Logger.Level.BASIC;
    }
    
}

设置成 全局配置 [@EnableFeignClients(defaultConfiguration = xxx.class)]:

@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class)
public class TencentWechatUserApplication {

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

	// ...
	
}

设置成 局部配置[@FeignClient(configuration = xxx.class)]:

// 远程调用
@FeignClient(value = "blog-server", configuration = DefaultFeignConfiguration.class)
public interface BlogServerClient {

    @PostMapping("/blog/Blog/getAllBlog")
    ResultData getAllBlog();

}

规范的使用 Feign 进行远程调用 (整合公有模块)

直接将 Feign客户端 放在子模块中这样不太好, 我们应该把 Feign客户端 封装在共有模块中, 以便于 子模块 可以 直接调用

  • 目录结构:

3.Spring Cloud (Hoxton.SR8) 学习笔记—Nacos微服务治理、Nacos配置管理、Feign远程调用_第8张图片

BlogServerClientDefaultFeignConfiguration 两个类上面已经给出, 主要是 TESysBlog 这个实体类, 从对应的 子模块直接复制 过来即可。

  • 设置 Feign客户端 所在包 [@EnableFeignClients(basePackages = "xxx.xxx.xxx.xxx")]
@SpringBootApplication
@MapperScan("com.tencent.wechat.user.mapper")
@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class,
                    basePackages = "com.tencent.wechat.common.feign.clients")
public class TencentWechatUserApplication {

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

四、项目源码
点击前往 Gitee 查看项目源码

你可能感兴趣的:(Spring,Cloud学习笔记,spring,cloud,学习,java)