Nacos配置管理+Feign+Gateway网关

目录

Nacos配置管理

配置更改热更新

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

配置自动刷新

 多环境配置共享

​编辑 Nacos集群搭建

 Feign

 使用Feign开发步骤如下:

自定义Feign的配置

Feign的性能优化 

 feign的最佳实践

方法一:

 方法二:

Gateway统一网关

 搭建网关服务

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

 路由断言工厂

​编辑 路由过滤器

全局过滤器GlobalFilter 

 过滤器执行顺序

跨域问题处理

 


Nacos配置管理

配置更改热更新

 

 将配置交给nacos管理的步骤

配置自动刷新

 

 

 多环境配置共享

 Nacos集群搭建

 

 Feign

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

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

​​​​​​​

存在下面的问题:

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

 使用Feign开发步骤如下:

1、引入依赖

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

 2、添加@EnableFeignClients注解

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

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

 3、编写FeignClient接口

 

package cn.itcast.order.clients;

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 {
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}

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

package cn.itcast.order.service;

import cn.itcast.order.clients.UserClient;
import cn.itcast.order.mapper.OrderMapper;
import cn.itcast.order.pojo.Order;
import cn.itcast.order.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private UserClient userClient;

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

自定义Feign的配置

 

Feign的性能优化 

 feign的最佳实践

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

方法一:

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

 方法二:

 

Gateway统一网关

 搭建网关服务

 

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

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

 路由断言工厂

 路由过滤器

全局过滤器GlobalFilter 

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

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

 过滤器执行顺序

 

跨域问题处理

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值