SpringCloud笔记 - Day2 Nacos Feign Gateway

news2025/1/16 6:32:41

1. Nacos配置管理

配置的热更新
在这里插入图片描述

DataID 命名格式: 实例名-环境名.后缀名(yaml)
尽量用 yaml,不用 yml

在这里插入图片描述
在这里插入图片描述

2. Nacos配置管理 - 微服务配置拉取

在这里插入图片描述
把所有nacos地址和配置信息都放在 bootstrap.yml

  1. 引入 Nacos配置管理依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  1. 新建 bootstrap.yml (bootstrap.yml为引导文件,它的优先级比application.yml要高)
spring:
  application:
    name: user-service
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        file-extension: yaml # 配置文件后缀
        namespace: c3b1bbc3-0ebd-4298-92c2-1e54858acf02 # 命名空间
        group: DEFAULT_GROUP # 配置组
        prefix: user-service # 配置文件前缀

      server-addr: localhost:8848 # nacos地址
      discovery:
        namespace: c3b1bbc3-0ebd-4298-92c2-1e54858acf02 # 命名空间
        group: DEFAULT_GROUP # 配置组
  1. 读取配置

在Nacos的配置为:
pattern-dateformat=yyyy-MM-dd HH:mm:ss

在usercontroller.java里:

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

@GetMapping("now")
public String now() {
    return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}

此处遇到坑:

  1. 要使用@NacosValue注解
  2. 要确保namespace一致
  3. boot, cloud, alibaba版本匹配
  4. 有时候需要重启一下nacos

在这里插入图片描述

3. Nacos配置管理 - 配置热更新

配置自动刷新

方式一:在@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;

@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}

然后直接访问 PatternProperties的bean的dateformat就行。

在这里插入图片描述

4. Nacos配置管理 - 微服务配置共享

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5. Nacos配置环境 - Nacos集群管理

在这里插入图片描述
在这里插入图片描述

6. 基于Feign的远程调用

在这里插入图片描述

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

在启动类上加注解@EnableFeignClients

@EnableFeignClients
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {

编写 Feign 客户端

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

调用:

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.用Feign远程调用
        User user = userClient.findById(order.getUserId());
        // 3.封装user到Order
        order.setUser(user);
        // 4.返回
        return order;
    }

在这里插入图片描述

7. Feign - 自定义配置

在这里插入图片描述
覆盖配置方式:

配置文件:

全局:

feign:
	client:
		config:
			default:
				loggerLevel: FULL


局部:

feign:
	client:
		config:
			userservice:
				loggerLevel: FULL


java代码形式:

// FeignClientConfiguration.java
public class DefaultFeignConfiguration {
    @Bean
    public Logger.Level logLevel(){
        return Logger.Level.BASIC;
    }
}

全局:

@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)

局部

@FeignClient(value = "userservice", configuration = FeignClientConfiguration.class)

在这里插入图片描述

8. Feign - 性能优化

在这里插入图片描述

  1. 引入 HttpClient依赖
<dependency>
    <!-- httpClient -->
    <groupId>io.github.openfeign</groupId>
    <artifactId>fegin-httpclient</artifactId>
</dependency>

配置连接池:

feign:
	client:
		config:
			default:
				loggerLevel: BASIC
	httpclient:
		enabled: true # 开启feign对HttpClient的支持
		max-connections: 200 #最大连接数
		max-connections-per-route: 50 #每个路径的最大连接数

在这里插入图片描述

9. Feign - 最佳实践

方式一(继承):给消费者的FeignClient和提供者controller定义统一的父接口作为标准。

在这里插入图片描述
方式二(抽取):将FeignClient抽取为独立模块,并且把接口有关的pojo,默认的Feign配置都放到这个模块中,提供给所有消费者使用。

在这里插入图片描述

10. Feign - 实现抽取

  1. 新建module,命名为feign-api,引入 feign的starter依赖。
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. 将所有client、pojo和配置类都放到feign-api里面

  2. 改变import的路径

  3. 重启重试即可。

11. Gateway - 网关介绍

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

12. Gateway - 快速入门

  1. 新建module,命名为 gateway2,引入依赖
<!--nacos服务注册发现依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--网关gateway依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
  1. 创建GatewayApplication,编写路由配置及nacos地址
server:
  port: 10010
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: nacos:8848 # nacos地址
    gateway:
      routes:
        - id: user-service # 路由标示,必须唯一
          uri: lb://userservice # 路由的目标地址
          predicates: # 路由断言,判断请求是否符合规则
            - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
        - id: order-service
          uri: lb://orderservice
          predicates:
            - Path=/order/**

在这里插入图片描述

在这里插入图片描述

13. Gateway - 路由断言工厂

在这里插入图片描述
!
在这里插入图片描述

14. Gateway - 路由过滤器GatewayFilter

在这里插入图片描述
在这里插入图片描述
全局过滤器:

spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: nacos:8848 # nacos地址
    gateway:
	  ...
      default-filters:
        - AddRequestHeader=Truth,Itcast is freaking awesome!
      ...

在这里插入图片描述

15. Gateway - GlobalFilter

在这里插入图片描述


// @Order(-1)
@Component
public class AuthorizeFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 1.获取请求参数
        ServerHttpRequest request = exchange.getRequest();
        MultiValueMap<String, String> params = request.getQueryParams();
        // 2.获取参数中的 authorization 参数
        String auth = params.getFirst("authorization");
        // 3.判断参数值是否等于 admin
        if ("admin".equals(auth)) {
            // 4.是,放行
            return chain.filter(exchange);
        }
        // 5.否,拦截
        // 5.1.设置状态码
        exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
        // 5.2.拦截请求
        return exchange.getResponse().setComplete();
    }

    @Override
    public int getOrder() {
        return -1;
    }
}

在这里插入图片描述

在这里插入图片描述

16. Gateway - 过滤器链执行顺序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

17. Gateway - Cors跨域问题处理

在这里插入图片描述

spring:
  application:
    name: gateway
  cloud:
    gateway:
      globalcors:
        add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
        cors-configurations:
            '[/**]':
                allowedOrigins: #允许哪些网站的跨域请求
                  - 'http://localhost:10000' 
                allowedMethods: #允许跨域请求的方法
                  - 'GET'
                  - 'POST'
                  - 'PUT'
                  - 'DELETE'
                  - 'OPTIONS'
                allowedHeaders: '*' # 允许跨域请求的头
                allowCredentials: true # 是否允许携带cookie
                maxAge: 3600 # 跨域请求的有效时间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/162334.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java 探花交友项目实战篇1Dubbo 提供者消费者 dubbo高级特性 启动检查 多版本 超时与重试 负载均衡

Dubbo的前世今生 SOA架构 Dubbo介绍 Dubbo是阿里巴巴公司开源的一个高性能、轻量级的 Java RPC 框架。 致力于提供高性能和透明化的 RPC 远程服务调用方案&#xff0c;以及 SOA 服务治理方案。 官网&#xff1a;http://dubbo.apache.org 目前Dubbo在企业中有两种开发思路 fe…

2023年零基础想学大数据?别急!先搞清这一点

◆ 首先学会百度与Google 不论遇到什么问题&#xff0c;先试试搜索并自己解决。 Google首选&#xff0c;翻不过去的&#xff0c;就用百度吧。 大数据知识点&#xff1a; ​ 编辑切换为居中 从传统关系型数据库入手&#xff0c;掌握数据迁移工具、BI数据可视化工具、SQL&am…

浅谈归并排序与快速排序

目录一、归并排序&#xff08;Merge Sort&#xff09;1.1 二路归并1.2 归并排序算法1.3 应用&#xff1a;计算逆序对的数量二、快速排序&#xff08;Quick Sort&#xff09;2.1 快速排序算法2.2 应用&#xff1a;快速选择三、模板汇总References一、归并排序&#xff08;Merge …

无聊猿游戏Dookey Dash分析

Dookey Dash是无聊猿项目方Yuga Labs近期即将推出的一款区块链游戏产品&#xff0c;无聊猿作为NFT的头部项目&#xff0c;自然也获得不少玩家的关注&#xff0c;以此赋能NFT&#xff0c;同时也被无聊猿持有者寄予厚望。游戏背景与规则Yuga Labs在游戏网站上使用了一则视频来为玩…

[CVPR 2022] Rethinking the Augmentation Module in Contrastive Learning

ContentsIntroductionMethodLearn Hierarchical Augmentation InvarianceFeature expansion with augmentation embeddingsExperimentsReferencesIntroduction 在对比学习中&#xff0c;数据增强是非常重要的&#xff0c;对比学习的本质就是通过让模型对数据增强具有不变性来使…

给国行Sony9500H更换美区950H主板

折腾理由 家中小朋友因为疫情&#xff0c;经常需要投屏上网课&#xff0c;感觉在pad上面看&#xff0c;画面太小距离太近&#xff0c;并且已经近视&#xff0c;想着投屏到电视上&#xff0c;稍微改善一下用眼环境。软件投屏用着不爽&#xff0c;国产投屏软件有广告&#xff0c…

故障排查:Java Web程序未通过Acunetix的漏洞检查

博客主页&#xff1a;https://tomcat.blog.csdn.net 博主昵称&#xff1a;农民工老王 主要领域&#xff1a;Java、Linux、K8S 期待大家的关注&#x1f496;点赞&#x1f44d;收藏⭐留言&#x1f4ac; 目录故障详情问题原因注意事项两次失败的尝试relaxedPathChars & relax…

技术博客|第17期:广告程序化交易(一)- 生态系统

在《Hulu/Disney Streaming流媒体广告平台中的核心技术&#xff08;上&#xff09;》广告流程章节中&#xff0c;我们提到了Disney的主要流量是通过每年定期举行的Upfront大会来进行售卖。Upfront会占据我们大部分的流量。除了Upfront售卖的方式以外&#xff0c;剩余的流量在Di…

解析数字员工,为何其已成为企业优势选择

数字化转型浪潮来袭&#xff0c;“数字员工”市场加速升温&#xff0c;各行各业都开始探索数字员工的应用场景。到底什么是数字员工&#xff0c;他们又有哪些优势而备受企业青睐&#xff1f;“抛头露面”与“幕后英雄”数字员工是一种形象化的称呼&#xff0c;所谓“数字员工”…

AOSP安卓源码下载

Android源码下载 在国内想下载Android要么科学上网&#xff0c;要么使用国内搭建的镜像&#xff0c;有清华镜像&#xff0c;中科大的镜像网站。这里使用清华镜像网站镜像Android源码的下载清华镜像网站地址&#xff0c;为啥我要写这篇笔记嘞&#xff0c;虽然网上有很多这方便的…

理发之前先用 AI 替你尝试新发型 #hairstyleai

让 Tony 老师傻眼的 AI 发型效果神器上线&#xff01;&#x1f487;hairstyleai 依靠人工智能的力量尝试新发型&#xff01; hairstyleai 是一个在线人工智能网站&#xff0c;可以根据你的照片&#xff0c;使用强大的人工智能技术生成不同的发型&#xff0c;看看到底哪种最适合…

Layer Normalization

1、原理 Layer Normalization是针对自然语言处理领域提出的&#xff0c;例如像RNN循环神经网络。在RNN这类时序网络中&#xff0c;时序的长度并不是一个定值&#xff08;网络深度不一定相同&#xff09;&#xff0c;比如每句话的长短都不一定相同&#xff0c;所有很难去使用BN…

Gradle学习笔记之build.gradle文件

文章目录简介常见属性代码仓库subprojects和allprojectsext自定义属性buildscript简介 build.gradle是gradle构建脚本文件&#xff0c;支持java、groovy等语言。 每个gradle项目或模块都会有一个build.gradle文件&#xff0c;该文件是项目构建的入口&#xff0c;可配置版本、…

【RabbitMQ二】——RabbitMQ入门教程(简单模式)

RabbitMQ入门教程&#xff08;简单模式&#xff09;前言RabbitMQ相关术语RabbitMQ简单模式示例总结如果博主的文章对您有所帮助&#xff0c;可以评论、点赞、收藏&#xff0c;支持一下博主!!!前言 本篇博客主要是实现RabbitMQ最简单的模式&#xff0c;一个生产者&#xff0c;一…

【指针笔试题上】你知道大厂面试题的指针题是什么样的吗?快来通过这些面试题目检测一下自己吧!

目录 前言&#xff1a; 一.strlen和sizeof的区别 二.一维数组笔试题解析 三.二维数组笔试题解析 四.总结&#xff1a; 博客主页&#xff1a;张栩睿的博客主页 欢迎关注&#xff1a;点赞收藏留言 系列专栏&#xff1a;c语言学习 家人们写博客真的很花时间的&#xff0c;你们…

【自学Docker】一文解决Docker安装

Docker Centos安装 Docker版本 Docker 从 1.13 版本之后采用时间线的方式作为版本号&#xff0c;分为社区版CE和企业版EE。 Docker社区版是免费提供给个人开发者和小型团体使用的&#xff0c;企业版会提供额外的收费服务&#xff0c;比如经过官方测试认证过的基础设施、容器…

1.1 java 基础语法

目录 一、Java 基础语法 &#xff08;1&#xff09;对象&#xff1a; &#xff08;2&#xff09;类&#xff1a; &#xff08;3&#xff09;方法&#xff1a; &#xff08;4&#xff09;实例变量&#xff1a; 二、如何运行java程序&#xff08;前提是java的环境已经创建完…

19.Isaac教程--C语言接口(Isaac C API)

Isaac C API ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录Isaac C API程序流程和消息格式ROS示例独立示例启动和停止应用程序向 Isaac 应用程序发布消息从 Isaac 应用程序接收消息语言环境设置示例消息ImageProtoRangeScanProtoStateP…

C语言 八皇后(包含错误代码及分析)

基本思路&#xff1a;用递归思想解决&#xff0c;在8*8的棋盘放置8个皇后&#xff0c;则放置成功会每行有且仅有一个皇后&#xff08;因为皇后不能同行&#xff09;&#xff0c;所以可以循环行&#xff0c;尝试在某列放置&#xff0c;和 全排列 http://t.csdn.cn/kvIXC 的解决方…

vulnhub DC系列 DC-4

总结&#xff1a;爆破&#xff0c;teehee提权 目录 下载地址 漏洞分析 信息收集 密码爆破 命令执行 ​编辑 ssh爆破 提权 下载地址 DC-4.zip (Size: 617 MB)Download: http://www.five86.com/downloads/DC-4.zipDownload (Mirror): https://download.vulnhub.com/dc/D…