当前位置:   article > 正文

Nacos配置管理+Feign+Gateway网关_nacos+feign+gateway ppt

nacos+feign+gateway ppt

目录

Nacos配置管理

配置更改热更新

​编辑 将配置交给nacos管理的步骤

配置自动刷新

 多环境配置共享

​编辑 Nacos集群搭建

 Feign

 使用Feign开发步骤如下:

自定义Feign的配置

Feign的性能优化 

 feign的最佳实践

方法一:

 方法二:

Gateway统一网关

 搭建网关服务

 访问localhost:10010/user/1之后的流程

 路由断言工厂

​编辑 路由过滤器

全局过滤器GlobalFilter 

 过滤器执行顺序

跨域问题处理

 


Nacos配置管理

配置更改热更新

 

 将配置交给nacos管理的步骤

配置自动刷新

 

 

 多环境配置共享

 Nacos集群搭建

 

 Feign

使用restTemplate方式调用存在的问题

先来看我们以前利用RestTemplate发起远程调用的代码:

​​​​​​​

存在下面的问题:

  • 代码可读性差,编程体验不统一
  • 参数复杂URL难以维护

 使用Feign开发步骤如下:

1、引入依赖

  1. <!-- feign客户端依赖-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-openfeign</artifactId>
  5. </dependency>

 2、添加@EnableFeignClients注解

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

 3、编写FeignClient接口

 

  1. package cn.itcast.order.clients;
  2. import cn.itcast.order.pojo.User;
  3. import org.springframework.cloud.openfeign.FeignClient;
  4. import org.springframework.web.bind.annotation.GetMapping;
  5. import org.springframework.web.bind.annotation.PathVariable;
  6. @FeignClient("userservice")
  7. public interface UserClient {
  8. @GetMapping("/user/{id}")
  9. User findById(@PathVariable("id") Long id);
  10. }

4、使用FeignClient接口中定义的方法代替RestTemplate

  1. package cn.itcast.order.service;
  2. import cn.itcast.order.clients.UserClient;
  3. import cn.itcast.order.mapper.OrderMapper;
  4. import cn.itcast.order.pojo.Order;
  5. import cn.itcast.order.pojo.User;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Service;
  8. import org.springframework.web.client.RestTemplate;
  9. @Service
  10. public class OrderService {
  11. @Autowired
  12. private OrderMapper orderMapper;
  13. @Autowired
  14. private UserClient userClient;
  15. public Order queryOrderById(Long orderId) {
  16. // 1.查询订单
  17. Order order = orderMapper.findById(orderId);
  18. //2.用Feign远程调用
  19. User user = userClient.findById(order.getUserId());
  20. //3.封装user到ORDER
  21. order.setUser(user);
  22. // 4.返回
  23. return order;
  24. }

自定义Feign的配置

 

Feign的性能优化 

 feign的最佳实践

在消费者order中的UserClient接口定义的方法和提供者user中controller层的一个方法的提交HTTP方式、返回类型、参数类型、路径都一样 

方法一:

官方不推荐,会导致紧耦合,springMVC不起作用(继承不了参数)

 方法二:

 

Gateway统一网关

 搭建网关服务

 

 访问localhost:10010/user/1之后的流程

用户访问localhost:10010/user/1是网关的端口10010,请求进入网关,网关无法处理这个业务,就只能基于路由规则去做判断,然后去注册中心拉取服务列表,根据地址、负载均衡找到具体的地址

 路由断言工厂

 路由过滤器

全局过滤器GlobalFilter 

 自定义类,实现gobalFilter,添加@order注解:

  1. //order注解是用来定义过滤器的顺序,越小优先级越高
  2. @Order(-1)
  3. @Component
  4. public class AuthorizeFileter implements GlobalFilter {
  5. @Override
  6. public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
  7. //1.获取请求参数
  8. ServerHttpRequest request = exchange.getRequest();
  9. //2.获取参数中的authorization参数
  10. MultiValueMap<String, String> params = request.getQueryParams();
  11. //3.判断参数值是否等于admin
  12. String authorization = params.getFirst("authorization");
  13. //4.是的话放行
  14. if ("admin".equals(authorization)){
  15. return chain.filter(exchange);
  16. }
  17. //5.否则拦截
  18. //5.1设置状态码
  19. exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
  20. //5.2拦截请求
  21. return exchange.getResponse().setComplete();
  22. }
  23. }

 过滤器执行顺序

 

跨域问题处理

跨域:域名不一致就是跨域

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号