当前位置: 首页 > news >正文

springcloud03-Nacos配置中心

通过配置中心,实现mysql、mybatis连接的动态配置

一、搭建一个provider服务

连接mysql、myabtis-plus,提供接口

1、创建项目

2、配置文件和jar包

<dependencies><dependency><groupId>com.hl</groupId><artifactId>common</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.9</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
# Nacos认证信息
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos
spring.cloud.nacos.config.contextPath=/nacos
# 设置配置中心服务端地址
spring.cloud.nacos.config.server-addr=localhost:8848# Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,请不要填写这个值,直接留空即可
# spring.cloud.nacos.config.namespace=
spring.config.import=nacos:provider.yml?refresh=true
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
# 在nacos注册中心暴漏的服务名
spring.application.name=provider
# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=localhost:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public# 应用服务 WEB 访问端口
server.port=8080
#mysql
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ry-vueusername: rootpassword: 123456
#mybatis-plus
mybatis-plus:mapper-locations: classpath*:/mapper/*.xmltype-aliases-package: com.hl.entityconfiguration:map-underscore-to-camel-case: true

3、补全包结构和基本文件

@SpringBootApplication
@EnableDiscoveryClient
@MapperScan(basePackages = "com.hl.mapper")
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}}

4、写web层,测试

package com.hl.web;import com.hl.entity.SysPost;
import com.hl.service.SysPostService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/post")
public class PostController {@Autowiredprivate SysPostService sysPostService;@RequestMapping("/list")public List<SysPost> postList(){return sysPostService.list();}
}

5、将数据库连接的配置文件放到nacos配置中心

二、搭建一个consumer消费者服务

1、创建消费者模块

2、补全配置文件

3、声明远程调用的api接口

@FeignClient(value = "provider")
public interface SysPostFeign {@RequestMapping("/post/list")public List<SysPost> postList();
}

4、通过web层远程调用

@RestController
@RequestMapping("/consumer")
public class ConsumerController {//远程调用api接口(openFeign)@Autowiredprivate SysPostFeign sysPostFeign;@RequestMapping("/list")public List<SysPost> postList(){return sysPostFeign.postList();}
}

http://localhost:8082/consumer/list

Gateway网关服务

微服务架构提供一种简单有效的统一的 API 路由管理方式

Spring Cloud Gateway 底层使用了高性能的通信框架Netty

安全,监控/指标,和限流。

统一项目入口,安全,监控/指标,和限流、路由、负载均衡服务器。

Spring Cloud Gateway 网关的作用

Spring Cloud Gateway 是 Spring Cloud 生态系统中的一个 API 网关服务,基于 Spring 5、Spring Boot 2 和 Project Reactor 等技术构建。它的主要作用包括:

核心功能

  1. 路由转发

    • 根据请求路径、主机、头信息等条件将请求转发到不同的微服务

    • 支持动态路由配置

  2. 负载均衡

    • 集成 Ribbon 实现客户端负载均衡

    • 自动将请求分发到多个服务实例

  3. 请求过滤

    • 提供前置(PRE)和后置(POST)过滤器

    • 可自定义全局过滤器和路由过滤器

重要特性

  1. 安全控制

    • 统一认证和授权

    • 支持 JWT、OAuth2 等安全协议

    • 防止 SQL 注入、XSS 等攻击

  2. 流量控制

    • 限流(Rate Limiting)

    • 熔断(集成 Hystrix 或 Resilience4j)

  3. 协议转换

    • 支持 HTTP 与 WebSocket 协议转换

    • 可处理 REST 和 gRPC 请求

  4. 监控与日志

    • 集中收集请求日志

    • 集成监控组件如 Prometheus

  5. 跨域支持

    • 统一处理 CORS 跨域请求

优势

  • 高性能:基于 Netty 的非阻塞异步模型

  • 易扩展:通过过滤器链机制高度可定制

  • 声明式配置:支持 YAML 和 Java DSL 配置方式

  • 服务发现集成:完美兼容 Eureka、nacos等服务注册中心

Spring Cloud Gateway 作为微服务架构的入口,有效解决了微服务架构中的统一访问、安全控制、流量管理等问题,是构建现代云原生应用的重要组件。

1、搭建网关服务

gateway使用了netty框架进行通信,无需引入spring-boot-starter-web。

nacos-discovery
nacos-config
spring-cloud-gateway
loadBalancer

2、利用网关统一项目入口,转发请求到目标服务

spring:cloud:gateway:discovery:locator:enabled: trueroutes:#id : 唯一标识 一般和服务名相同#uri : 路由转发地址#predicates:路由规则匹配,断言匹配- id: provideruri: http://localhost:8080/predicates:- Path=/p/**#http://localhost:10010/p/post/list -> http://localhost:8080/p/post/list

http://localhost:10010/p/post/list

http://localhost:8080/p/post/list

3、了解网关鉴权

路由转发功能
1)静态路由模式
spring:cloud:gateway:discovery:locator:enabled: trueroutes:#id : 唯一标识 一般和服务名相同#uri : 路由转发地址#predicates:路由规则匹配,断言匹配   静态路由- id: provideruri: http://localhost:8080/  predicates:- Path=/p/**#http://localhost:10010/p/post/list -> http://localhost:8080/p/post/list# 静态路由- id: consumer   uri: http://localhost:8082/ predicates:- Path=/c/**filters:- StripPrefix=1  #删除前缀路径  删除一层#http://localhost:10010/c/consumer/list -> http://localhost:8082/c/consumer/list#删除前缀路径  删除一层#http://localhost:8082/consumer/list
2)动态路由模式  
spring:cloud:gateway:discovery:locator:enabled: trueroutes:#id : 唯一标识 一般和服务名相同#uri : 路由转发地址#predicates:路由规则匹配,断言匹配- id: provider
#          uri: http://localhost:8080/  #静态路由uri: lb://provider    #动态路由predicates:- Path=/p/**#http://localhost:10010/p/post/list -> http://localhost:8080/p/post/list- id: consumer
#          uri: http://localhost:8082/  #静态路由uri: lb://consumer    #动态路由predicates:- Path=/c/**filters:- StripPrefix=1  #删除前缀路径  删除一层#http://localhost:10010/c/consumer/list -> http://localhost:8082/c/consumer/list#删除前缀路径  删除一层#http://localhost:8082/consumer/list

测试负载均衡,配置文件无需修改。

设置provider以多实例模式运行。添加日志输出,查看运行效果。

4、添加局部过滤器

spring:cloud:gateway:discovery:locator:enabled: trueroutes:#id : 唯一标识 一般和服务名相同#uri : 路由转发地址#predicates:路由规则匹配,断言匹配- id: provider
#          uri: http://localhost:8080/  #静态路由uri: lb://provider    #动态路由predicates:- Path=/p/**filters:- StripPrefix=1  #删除前缀路径  删除一层- PrefixPath=/p- AddRequestParameter=name,zhangsan#http://localhost:10010/p/post/list -> http://localhost:8080/p/post/list- id: consumer
#          uri: http://localhost:8082/  #静态路由uri: lb://consumer    #动态路由predicates:- Path=/c/**filters:- StripPrefix=1  #删除前缀路径  删除一层#http://localhost:10010/c/consumer/list -> http://localhost:8082/c/consumer/list#删除前缀路径  删除一层#http://localhost:8082/consumer/list

 

5、添加全局过滤器

package com.hl.filter;import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;/*
全局过滤器*/
@Component
public class GlobalGatewayFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {System.out.println("filter.........");//放行,继续到达下一个过滤器return chain.filter(exchange);}//数字越小,执行越往前@Overridepublic int getOrder() {return 0;}
}

 

http://www.lryc.cn/news/604818.html

相关文章:

  • Apache Ignite 2.8 引入的新指标系统(New Metrics System)的完整说明
  • 如何通过项目管理系统提升交付率
  • 【ip】IP地址能否直接填写255?
  • Ubuntu22.04中搭建GN编译环境
  • 用Python+MySQL实战解锁企业财务数据分析
  • 深入浅出:C++ STL简介与学习指南
  • 文件加密工具(勒索病毒加密方式)
  • Dify 从入门到精通(第 4/100 篇):快速上手 Dify 云端:5 分钟创建第一个应用
  • VS2022 libtorch-win-shared-with-deps-2.7.1+cu126 配置记录
  • 程序开发中常用的 Emoji 符号
  • Python爬虫04_Requests豆瓣电影爬取
  • 生成模型实战 | GLOW详解与实现
  • JavaFX CSS @font-face 错误全面分析 loadStylesheetUnPrivileged / reportException
  • 快速删除Word和WPS文字中的空白行
  • Redis实现数据传输简介
  • Kubernetes高级调度02
  • Elasticsearch 索引管理 API 实战:涵盖创建、查看、修改、删除及别名
  • Redis 面试全解析:从数据结构到集群架构(含实战解决方案)
  • 设计模式之单例模式及其在多线程下的使用
  • 【C#】DevExpress.XtraEditors.MemoEdit memoEditLog控件讲解
  • Rabbitmq中常见7种模式介绍
  • pytorch小记(三十三):PyTorch 使用 TensorBoard 可视化训练过程(含完整示例)
  • 用 Go Typed Client 快速上手 Elasticsearch —— 从建索引到聚合的完整实战
  • 8.Linux : 日志的管理与时钟同步的配置
  • Rabbit MQ的消息模式-Java原生代码
  • YOLO-01目标检测基础
  • 02 基于sklearn的机械学习-特征降维(特征选择、PCA)、KNN算法、模型选择与调优(交叉验证、朴素贝叶斯算法、拉普拉斯平滑)
  • Android调用python库和方法的实现
  • YOLOv5u:无锚点检测的革命性进步
  • android-PMS-创建新用户流程