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 {

    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private 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: 200
    max-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: gateway
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos地址
    gateway:
      routes:
        - id: user-server         #路由标识,必须唯一
          uri: lb://userservice   #路由的目标地址
          predicates:             #断言,判断请求是否符合规则
            - Path=/user/**
        - id: order-server
          uri: lb://orderservice
          predicates:
            - Path=/order/**

 524d8b6c85ee4bb8a87586d9a22cca7c.png

 

 路由断言工厂

de4eca2ac8d4404c99ca56f6d9bc7ae2.png

 

 路由过滤器

d4ac01c7b1194087891431124bd1385c.png

7b850199d77c470b805c035b786b3c38.png

 对单个路由的过滤器:

1fbc381cff2f415aad1bacdde80759f1.png

对全部路由的过滤器 

124655323cbb4fc1a0798d86bd1767ea.png

 

全局过滤器

自定义类,实现GlobalFilter

@Component
//@Order(-1)  //定义优先级
public class AuthorizeFilter implements GlobalFilter, Ordered {
    @Override
    public 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();
    }

    //设置优先级
    @Override
    public int getOrder() {
        return -1;
    }
}


过滤器执行顺序

1a9638610128440c82866770c77e1182.png

 

 跨域配置

a66b397d6af34f4997b4e3e66d9e6396.png

 

  • 14
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
springcloud-netflix是一个基于Spring Cloud的微服务框架。它提供了一系列工具和组件来简化开发和管理分布式系统的任务。其中包括Eureka、Feign和Zuul等组件。 在搭建springcloud-netflix项目时,需要创建父工程和子工程。父工程是springcloud-netflix-parent,子工程可以是springcloud-netflix-eureka、springcloud-netflix-service-pay等。每个子工程都需要在pom.xml文件中导入相应的依赖。 对于springcloud-netflix-eureka,需要导入spring-cloud-starter-netflix-eureka-server和spring-cloud-starter-netflix-eureka-client等依赖。此外,还需要配置相关的类。 对于springcloud-netflix-service-pay,需要导入spring-cloud-starter-netflix-eureka-client、spring-boot-starter-web和spring-cloud-starter-openfeign等依赖。同样,也需要配置相关的类。 对于Zuul,它是一个API Gateway服务器,提供了动态路由、监控、弹性和安全等边缘服务的框架。在搭建Zuul时,需要导入spring-cloud-starter-netflix-eureka-client、spring-boot-starter-web和spring-cloud-starter-netflix-zuul等依赖。同时,需要配置开启Zuul。 总之,springcloud-netflix是一个基于Spring Cloud的微服务框架,包括了Eureka、Feign和Zuul等组件,可以帮助简化开发和管理分布式系统的任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SpringCloudNetflix](https://blog.csdn.net/Exist_W/article/details/131867868)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值