SpringCloud------Feign,Geteway

Feign

f66a2fa98eb643349524a4a89e8abd6c.png

所以我们使用一门新的技术:声明式的http客户端Feign

第一步:引入依赖

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

第二步:开启自动装配功能@EnableFeignClients

@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients
public class OrderApplication{public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}
}

第三步:编写FeginClient接口

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;//设置服务名称
@FeignClient("userservice")
public interface UserClient {//设置请求方式,url,返回对象,请求参数@GetMapping("/user/{id}")User findbyID(@PathVariable("id") Long id);
}

第四步:使用接口中自定义的方法

@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate UserClient userClient;public Order queryOrderById(Long orderId) {// 1.查询订单Order order = orderMapper.findById(orderId);//        // 2。利用RestTemplate发起http请求,查询用户
//        String url = "http://userservice/user/"+order.getUserId();//使用rureka服务名
//        User user = restTemplate.getForObject(url, User.class);//2.改成利用feign远程调用User user = userClient.findbyID(order.getUserId());//3. 封装数据order.setUser(user);// 4.返回return order;

 

Fegin的自定义配置

42a1783149b9495db8af841fa8a93f5b.png

feign:client:config:default:loggerlevel: FULL

 

Fegin的性能优化

ee1a1bc83be8419bb743542019f62756.png

修改底层客户端为Apache HttpClient方式:

第一步:引入依赖

<!--        httpclient依赖--><dependency><groupId>io.github.openfeign</groupId><artifactId>feign-httpclient</artifactId></dependency>

第二步:配置连接池

feign:httpclient:enabled: true # 支持http的开关max-connections: 200max-connections-per-route: 50

 

Feign的最佳实践

69c6cf95de90497f872d0c8e47c4e109.png

 

8ee4ae6c06e247419766ad236057ad3b.png 

 

 Gateway

3552c6d3eb14432f8cabda163a047342.png

 搭建网关

第一步:引入依赖

        <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>

第二步:编写网关路由配置及nacos地址

server:port: 10010
spring:application:name: gatewaycloud:nacos:server-addr: localhost:8848 # nacos地址gateway:routes:- id: user-server         #路由标识,必须唯一uri: lb://userservice   #路由的目标地址predicates:             #断言,判断请求是否符合规则- Path=/user/**- id: order-serveruri: lb://orderservicepredicates:- Path=/order/**

 524d8b6c85ee4bb8a87586d9a22cca7c.png

 

 路由断言工厂

de4eca2ac8d4404c99ca56f6d9bc7ae2.png

 

 路由过滤器

d4ac01c7b1194087891431124bd1385c.png

7b850199d77c470b805c035b786b3c38.png

 对单个路由的过滤器:

1fbc381cff2f415aad1bacdde80759f1.png

对全部路由的过滤器 

124655323cbb4fc1a0798d86bd1767ea.png

 

全局过滤器

自定义类,实现GlobalFilter

@Component
//@Order(-1)  //定义优先级
public class AuthorizeFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {//1,获取请求参数ServerHttpRequest request = exchange.getRequest();MultiValueMap<String, String> queryParams = request.getQueryParams();//2,获取参数中的authorization参数String authorization = queryParams.getFirst("authorization");//3,判断参数if("admin".equals(authorization)){//4,是放行return chain.filter(exchange);}//5,否拦截exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return  exchange.getResponse().setComplete();}//设置优先级@Overridepublic int getOrder() {return -1;}
}


过滤器执行顺序

1a9638610128440c82866770c77e1182.png

 

 跨域配置

a66b397d6af34f4997b4e3e66d9e6396.png

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

翻译《The Old New Thing》- Taxes: Remote Desktop Connection and painting

Taxes: Remote Desktop Connection and painting - The Old New Thinghttps://devblogs.microsoft.com/oldnewthing/20060103-12/?p32793 Raymond Chen 2006年01月03日 开发成本&#xff1a;远程桌面连接和绘制 当用户通过远程桌面连接进行连接时&#xff0c;视频操作会通过网…

Centos 7.9 安装 tigervnc-server

环境&#xff1a;当前使用的 Centos 7.9 的光盘作为的本地源&#xff0c;或使用离线rpm包。 1 检查是否已安装 tigervnc [rootlocalhost /]# rpm -q tigervnc tigervnc-server 未安装软件包 tigervnc tigervnc-server-1.8.0-21.el7.x86_64 如果安装过卸掉 卸载: rpm -e [ro…

机器学习 - 集成学习算法介绍

集成学习的定义 集成学习&#xff08;Ensemble Learning&#xff09;是一种通过组合多个模型来提升预测性能的技术。简单来说&#xff0c;它就像是在开会时听取多人的意见&#xff0c;而不是只依赖一个人的观点&#xff0c;从而做出更准确的决策。 1. Bagging&#xff08;Boo…

4种现象表明你的血糖控制良好!

如果你出现以下4种现象&#xff0c;恭喜你&#xff0c;说明你的血糖控制的不错&#xff0c;需要继续坚持。 1.饥饿感减少&#xff0c;我们的脏腑能够吸收血液中的糖分了&#xff0c;就用不着饿了。&#xff0c;血液中的糖能够得到充分的利用&#xff0c;血糖自然降下去。 2.体…

队列的讲解

队列的概念 队列:只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 一端进另一端出 也就是可以做到&#xff0c;先…

单调栈练习

最大矩形面积 如果栈为空&#xff0c;或者新的元素是大于栈顶元素的&#xff0c;那么新来的元素不会破坏栈的单调性&#xff0c;那么就把这个柱子入栈。 特别注意&#xff1a;这里的s.empty()和s.top().height < a不能调换顺序&#xff0c;包括后面的判断也要先判断栈是否为…

iOS 创建pch文件

1.参考链接&#xff08;xcode8添加方法&#xff0c;之前的跟这个差不多&#xff09;&#xff1a; 参考链接 2.自我总结&#xff1a; &#xff08;1&#xff09;创建pch文件: 注意点&#xff1a;1&#xff09;注意选中所有的targets&#xff08;看图明义&#xff09; 2&…

基于java 自定义注解Annotation设计简单ORM框架——进阶篇

目录 引言实例新建两个注解标注实体类拼接sql语句 总结 引言 一般Java规范编程&#xff08;只是一种习惯&#xff0c;而不是强制&#xff09;中&#xff0c;变量的命名方式一般采用驼峰式命名。比如userName&#xff0c;userImage。但是在数据库中一般不会采用驼峰式&#xff…

如何在 Ubuntu 12.10 上使用 Python 创建 Nagios 插件

介绍 Python 是一种在 Linux 上默认可用的流行命令处理器。 我们之前已经介绍过如何在 Ubuntu 12.10 x64 上安装 Nagios 监控服务器。 这一次&#xff0c;我们将扩展这个想法&#xff0c;使用 Python 创建 Nagios 插件。 这些插件将在客户 VPS 上运行&#xff0c;并通过 NR…

利用KMeans进行遥感NDWI进行聚类分割

&#xff08;1&#xff09;解释 KMeans算法是一种非监督式的聚类算法&#xff0c;于1967年由J. MacQueen提出&#xff0c;聚类的依靠是欧式距离&#xff0c;其核心思想就是将样本划分为几个类别&#xff0c;类里面的数据与类中心的距离最小。类的标签采用类里面样本的均值。 这…

Android Compose四: 常用的组件 Text

Text Composable fun Text(text: String, //用于设置显示文本modifier: Modifier Modifier, //设置形状大小点击事件等color: Color Color.Unspecified, //fontSize: TextUnit TextUnit.Unspecified,fontStyle: FontStyle? null,fontWeight: FontW…

动态规划-两个数组的dp问题3

文章目录 1. 两个字符串的最小ASCII删除和&#xff08;712&#xff09;2. 最长重复子数组&#xff08;718&#xff09; 1. 两个字符串的最小ASCII删除和&#xff08;712&#xff09; 题目描述&#xff1a; 状态表示&#xff1a; 根据经验以及题目要求&#xff0c;建立二维数…