Nacos和Feign

Nacos安装

nacos启动:在bin目录下打开cmd输入:startup.cmd -m standalone

页面地址:http://192.168.216.1:8848/nacos/index.html

默认用户及密码:nacos

nacos注册中心

一、在cloud-demo父工程中添加spring-cloud-alibaba的管理依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.5.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
客户端添加client依赖
<!-- nacos客户端依赖包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

二、在yml中配置cloud

spring:
  application:
    name: userservice
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false
    username: root
    password: 12345678
    driver-class-name: com.mysql.jdbc.Driver
  cloud:
    nacos:
      server-addr: localhost:8848

Nacos服务分级存储模型

配置集群实例

修改application.yml

  cloud:
    nacos:
      discovery:
        cluster-name: HZ #自定义的集群名称

选择两个实例启动后,将cluster-name更改名字并启动另外一个

根据集群负载均衡

在order模块的application.yml加入

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

 在order-service中设置负载均衡的IRule为NacosRule,这个规则会优先寻找与自己同集群的服务

userservice: #要做配置的微服务名称
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

Nacos服务实例的权重设置

Nacos控制台可以设置实例的权重值,0-1之前

同集群内的多个实例,权重越高被访问的频率越高

权重设置为0则完全不会被访问,可以丝滑升级

环境隔离-namespace

①在nacos控制台创建一个命名空间,保存后生成一个id

②在service的appllication.yml中添加namespace:生成的id

同一个namespace才能访问

默认情况下,所有实例都是临时实例,临时实例采用心跳监测,不跳了就干掉。非临时实例是nacos主动问还活着不,甚至等它变健康。对服务消费者是主动推送(push和pull都有)变更消息。当集群中存在非临时实例时,采用cp模式,eureka采用ap模式

  cloud:
    nacos:
      discovery:
        cluster-name: HZ
        namespace: e2c424f6-3a00-4b96-a95c-e8bba723ff3b
        ephemeral: false #是否是临时实例

Nacos配置列表

在nacos页面的配置列表添加配置

项目启动,引导文件bootstrap.yml文件,优先级高与application.yml,读取nacos中配置文件,读取本地配置文件application.yml,创建spring容器,加载bean 

统一配置管理

2.引入nacos配置管理客户端依赖

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

3.在resourse下新建bootstrap.yml文件

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

4.将application中重复的内容删掉

5.启动服务,获取配置列表中的参数,尝试是否能取出

实现热更新配置:

第一种:在@value所在的类添加@RefreshScope

第二种:使用@ConfigurationProperties(prefix="pattern")

 

多环境配置共享

环境配置优先级:带环境的配置文件>不带环境的配置文件>本地配置环境

nacos集群结构

连接上数据库

1.修改cluster.conf.properties为cluster.conf,将服务ip及端口添加

2.修改application.properties文件

 

3.将nacos复制三份分别命名:nacos1、nacos2、nacos3

4.修改conf中的application.properties端口号,改为8845、8846、8847

5.启动三个nacos:startup.cmd

6.解压nginx,将它放在nacos同目录下,修改ngnix的config文件,配置下边,粘贴到http内部。启动nginx服务start nginx.exe

 

upstream nacos-cluster {
    server 127.0.0.1:8845;
	server 127.0.0.1:8846;
	server 127.0.0.1:8847;
}

server {
    listen       80;
    server_name  nacos-cluster;

    location /nacos {
        proxy_pass http://nacos-cluster;
    }
}
  • 如果nginx -s stop还能访问页面,使用tasklist /fi "imagename eq nginx.exe"查看,并nginx-1.18.0>tasklist -t -f /pid 11572杀掉进程

 

在网页中输入ip地址:端口号/nacos跳转,登录后配置列表添加配置,会自动在表中生成数据

Feign

声明式客户端

1.引入依赖

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

2.开启注解:启动类添加@EnableFeignClients注解

3.编写feign客户端,创建client包,编写UserClient接口

package cn.itcast.order.client;
​
import cn.itcast.order.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
​
/**
 * @ClassName UserClient
 * @Description TODO
 * @date 2024/8/29 14:12
 * @Version 1.0
 */
@FeignClient("userservice")
public interface UserClient {
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}

自定义feign配置

方式一:配置文件方式

①全局生效:

feign:
  client:
    config:
      default:
        logger-level: FULL

②局部生效:

feign:
  client:
    config:
      userservice:#这里写服务名称就是局部生效
        logger-level: FULL

方式二:java代码

package cn.itcast.order.config;
​
import feign.Logger;
import org.springframework.context.annotation.Bean;
​
​
/**
 * @ClassName DefaultFeignConfiguration
 * @Description TODO
 * @date 2024/8/29 15:31
 * @Version 1.0
 */
public class DefaultFeignConfiguration {
    @Bean
    public Logger.Level logLevel(){
        return Logger.Level.BASIC;
    }
​
}
启动:使用@FeignClient是局部使用,@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class)全局使用

Feign的最佳实践

①:让Controller和feignClient继承同一接口

②:将feignClient、pojo、feign的默认配置都定义到一个项目中,供所有消费者使用

新建moudlefeign-api,把order中的user类,client,config移到feign-api中,并将feign-api导入到order的pom文件中

  • 当定义的feignClient不在SpringBootApplication的扫描包范围时,这些feignClient无法使用。解决方式有两种:①:指定FeignClient所在包:@EnableFeignClient(basePackages="cn.itcast.fign.clients")②:指定FeignClient字节码:@EnableFeignClients(clients = UserClient.class)

 

  • 29
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值