Springboot + SpringCloud + Nacos + OpenFeign + Gateway
Springboot + SpringCloud + Nacos + OpenFeign + Gateway
根节点相关依赖
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.8</version><relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.0.4.0</version><type>pom</type><scope>import</scope>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2021.0.5</version><type>pom</type><scope>import</scope>
</dependency>
Nacos下载和安装
官网:https://nacos.io/zh-cn/
从GitHub下载对应版本nacos,版本对应关系:
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
cmd进入nacos/bin/目录
windows启动指令(单机模式):
startup.cmd -m standalone
以集群模式启动:
startup.cmd
停止运行:
shutdown.cmd
默认端口(集群需要复制多个安装包并修改端口,按实际情况修改):修改文件/conf/application.properties
server.port=8848
访问http://localhost:8848/nacos/index.html 进入服务中心管理页面,用户名和密码默认都为nacos,此时服务列表为空
服务发现(2021.0.4.0)
依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在yml配置文件中配置服务中心地址和服务名称(必须),指定该服务端口号
spring:cloud:nacos:#服务中心server-addr: localhost:8848#discovery:#集群名称#cluster-name: USER#命名空间 相同命名空间可以互相访问#namespace: 156727b1-1778-482b-8c20-0321151d660b#ephemeral: falseapplication:name: user-service
server:port: 8002
成功启动项目后,管理台会看到该服务已注册到服务列表
指定命名空间后,不同命名空间的服务不能相互访问.
集群指定后,相当于分组,可以相互访问
服务间通信OpenFeign
服务间利用http请求进行通信,可以使用RestTemplate和OpenFeign
OpenFeign比RestTemplate有一定优势
OpenFeign依赖(3.1.5):
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
yml配置:
启动类添加启动Feign注解:
@EnableFeignClients
使用:"user-service"为目的目标服务名称,
@FeignClient("user-service")
public interface UserClient {@RequestMapping("/user/{id}")public String getUserById(@PathVariable("id") Long id);
}
注入到controller中
@Autowired
UserClient userClient;
String userById = userClient.getUserById(userId);
feign优化配置(默认使用Urlconnection,无连接池)
日志级别尽量用basic
使用 HttpClient 或 OKHttp 代替 URLConnection
日志打印使用基本配置,使用httpclient或者okhttp,启用连接池
导入httpclient依赖(11.10)
<!--feign 引入支持httpclient-->
<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-httpclient</artifactId>
</dependency>
feign:httpclient:enabled: truemax-connections: 200max-connections-per-route: 50client:config:default:logger-level: basic
也可以在配置类中指定:
@Bean
public Logger.Level logLevel(){return Logger.Level.BASIC;
}
配置(客户端-service-service)负载均衡策略
导入依赖(高版本已移除ribbon)
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
创建配置文件
@Configuration
@LoadBalancerClients(defaultConfiguration = {NacosConfig.class})
public class NacosConfig {//2021版本已剔除ribbon/*** 配置客户端侧负载均衡规则 service-service*/@Beanpublic ReactorLoadBalancer<ServiceInstance> specLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) {String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new RoundRobinLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);}
}
网关(单独服务)
网关也作为一个微服务需要注册到注册中心,纳入管理,实际项目中可以布置多套网关
依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
配置端口和服务名称(必须),配置路由和跨域问题相关
server:port: 9000
spring:cloud:nacos:server-addr: localhost:8848gateway:routes:- id: user-serviceuri: lb://user-servicepredicates:- name: Pathargs:name: Pathvalue: /user/**- id: order-serviceuri: lb://order-servicepredicates:- name: Pathargs:name: Pathvalue: /order/**globalcors:# 跨域问题处理cors-configurations:'[/**]':#本次跨域检测有效期毫秒maxAge: 36000#是否允许携带cookieallowCredentials: true#允许请求携带的头信息allowed-headers:- "*"#允许哪些网站的跨域请求allowed-origins:- "http://localhost:8080"#允许的ajax请求方式allowed-methods:- "GET"- "POST"- "PUT"- "DELETE"- "OPTIONS"#解决options请求被拦截问题add-to-simple-url-handler-mapping: trueapplication:name: gateway-service
路由配置或者为
gateway:routes:- id: user-serviceuri: lb://user-servicepredicates:- Path=/user/**- id: order-serviceuri: lb://order-servicepredicates:- Path=/order/**
-----------------------
断言工厂相关说明(简写方式)
predicates:
- Path=/provider/hello/** #断言:路径相匹配进行路由
- Before=2021-08-25T12:53:46.101+08:00[Asia/Shanghai] #匹配这个时间之前的请求
- After=2021-08-25T12:53:46.101+08:00[Asia/Shanghai] #匹配这个时间之后的请求
- Between=2021-08-25T12:53:46.101+08:00[Asia/Shanghai],2021-09-25T12:53:46.101+08:00[Asia/Shanghai] #匹配这个两个时间的请求
- Cookie=username,zzyy
- Header=X-Request-Id,\d+ #请求头要有 X-Request-Id 属性并且值为整数的正则表达式
- Host=**.atguigu.com
- Method=GET #请求方式是 GET
- Query=username,\d+ #要有参数名 username 并且值还要是证书才能路由
因为网关实际上也是通过http和其他微服务通信,也可以配置负载均衡规则(service-service)
@Configuration
@LoadBalancerClients(defaultConfiguration = GatewayConfig.class)
public class GatewayConfig {@Beanpublic ReactorLoadBalancer<ServiceInstance> specLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) {String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new RoundRobinLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);}
}
其他功能:过滤
yml中配置默认过滤default-filters
或配置全局过滤器,可以指定order
@Component
public class GatewayFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request = exchange.getRequest();ServerHttpResponse response = exchange.getResponse();log.info("gateway" + request.getURI().toString());return chain.filter(exchange);}
}
Springboot + SpringCloud + Nacos + OpenFeign + Gateway相关推荐
- 《黑马头条》SpringBoot+SpringCloud+ Nacos等企业级微服务架构项目
01环境搭建.SpringCloud微服务(注册发现.服务调用.网关) 1)课程对比 2)项目概述 2.1)能让你收获什么 2.2)项目课程大纲 2.3)项目概述 随着智能手机的普及,人们更加习惯于通 ...
- 微服务01SpringCloud Eureka Ribbon Nacos Feign Gateway服务网关
微服务技术栈导学 SpringCloud01 1.认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构.这些架构之间有怎样的差别呢? 1.0.学 ...
- 熔断降级与限流在开源SpringBoot/SpringCloud微服务框架的最佳实践
目录导读 熔断降级与限流在开源SpringBoot/SpringCloud微服务框架的最佳实践 1. 开源代码整体架构设计 2. 微服务逻辑架构设计 3. 微服务熔断降级与限流规划 3.1 微服务熔断 ...
- Springboot集成nacos实现服务发现和配置中心
Nacos是阿里巴巴开源的服务发现和配置中心的中间件,springboot集成nacos比较方便,只需要以下三步: 1.依赖配置(pom文件) <properties><spring ...
- Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)十六(商品排序,Thymeleaf快速入门,商品详情页的展示)
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)十六(商品详情页的展示) 一.商品排序 1.完善页面信息 这是用来做排序的,默认按照综合排序 ...
- Nacos整合Gateway实现动态路由
往期回顾 Nacos的安装与配置 Spring Cloud集成Nacos作为注册中心 LoadBalacer集成Nacos实现负载均衡 常见的负载均衡策略分析 Spring Cloud集成Dubbo实 ...
- 微服务学习笔记(二)Ribbon+OpenFeign+Gateway
文章目录 4 Ribbon负载均衡 概述 RestTemplate 流程 策略 配置策略 饥饿加载 与Nginx对比 5 OpenFeign远程调用 RestTemplate调用的问题 与Feign对 ...
- Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)二十二(下单和微信支付)
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)二十(下单) 0.学习目标 会调用订单系统接口 实现订单结算功能 实现微信支付功能 1.订单 ...
- 解决SpringBoot+SpringCloud中feign调用服务传递参数为MultipartFile的问题
文章目录 前言 一.前期说明 二.使用步骤 1.引入maven依赖 2.新建feign的配置类 2.feign客户端 3.被调用的服务的Controller 4.第三方服务远程调用主服务传递Multi ...
最新文章
- 万粉博主推荐,微信小程序 +Flask 后端调用 AnimeGanV2
- java url 拦截_Spring mvc设置某些url不被interceptor拦截器拦截的方法
- 【设计模式】业务代表模式
- 雷军:小米10是首款支持8x8 MU-MIMO的手机
- Android 5.0 最应该实现的8个期望
- @程序员们,华为员工 300 万分红,老板给你多少年终奖?
- Python中的字典数据结构
- Scrapy爬取多层级网页内容的方式
- fiddler使用详细教程
- CASS11:超越自我,再续辉煌!CASS10.1.6:延续经典,只为更好!
- 咖啡自由的六个阶段:无差别打击,你还能承受吗?
- 孤岛双馈风电机组数学模型matlab,大型变速双馈风电机组动态稳定性仿真分析
- 计算机进程管理与虚拟机实验答案,实验四虚拟机实验报告解读.doc
- 【渝粤题库】广东开放大学 物业管理实务 形成性考核
- java perfrences_Enterprise Resource Planning (ERP) | Oracle France
- phpstudy运行时显示3306端口被占用
- matlab 巴特沃斯滤波
- warning C4819 的解决方法
- 战高端,荣耀亮出“第二把剑”
- 【MySQL】sys系统库配置表