springcloud微服务

本文介绍了nginx和zuul可配合使用,nginx作负载均衡,zuul作网关进行权限校验等。zuul有四种过滤器处理请求。Hystrix建立线程池防止微服务异常连锁反应。Feign可简洁调用Api,默认用ribbon负载均衡。还提及Ribbon和RestTemplate结合实现负载均衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

  • zuul:
    nginx和zuul是可以配合使用的,使用nginx作为负载均衡实现高并发的请求转发,Zuul用作网关,进行权限校验,限流等功能(ribbon是对微服务之间调用做负载均衡,zuul是对外部请求做负载均衡)
    zuul通过RequestContext来对request和response进行处理,有四种过滤器:
    PRE(请求执行之前),ROUTING(处理请求, 进行路由),POST(请求处理完成后执行), ERROR(出现错误时执行).

  • Hystrix会建立很多个小小的线程池,比如订单服务请求库存服务是一个线程池,请求仓储服务是一个线程池,请求积分服务是一个线程池。每个线程池里的线程就仅仅用于请求那个服务。防止某个微服务模块异常导致其他模块受到影响(某一个服务挂了,就会引起连锁反应,导致别的服务也挂。比如积分服务挂了,会导致订单服务的线程全部卡在请求积分服务这里,没有一个线程可以工作,瞬间导致订单服务也挂了).

  • Feign:
    Feign和Httpclient,RestTemplate等都可以发出http请求实现对Api的调用.但feign更简洁方便,同时Feign默认使用了ribbon进行负载均衡,默认的是随机的策略,如果想要更改策略,需要修改@FeignClient文件所在模块中yml的配置.

"product"服务(服务提供者)下:

– Client文件:

 */
@FeignClient(name = "product")   //代表提供服务的模块名
public interface ProductClient {

    @PostMapping("/product/listForOrder")     //在消费者服务层调用此方法,FeignClient再对"product"发出对应的http请求
                                             // 来实现对"product"服务提供者模块的访问
    List<ProductInfoOutput> listForOrder(@RequestBody List<String> productIdList);

    @PostMapping("/product/decreaseStock")
    void decreaseStock(@RequestBody List<DecreaseStockInput> decreaseStockInputList);
}

– controller文件:

@RestController
@RequestMapping("/product")
public class ProductController {

    @Autowired
    private ProductService productService;
    /**
     * 获取商品列表(给订单服务用的)
     * @param productIdList
     * @return
     */
    @PostMapping("/listForOrder")
    public List<ProductInfoOutput> listForOrder(@RequestBody List<String> productIdList) {
        return productService.findList(productIdList);
    }

    @PostMapping("/decreaseStock")
    public void decreaseStock(@RequestBody List<DecreaseStockInput> decreaseStockInputList) {
        productService.decreaseStock(decreaseStockInputList);
    }
}

"order"服务(消费者)下:

– service文件:

@Service
public class OrderServiceImpl implements OrderService {

    @Autowired
    private ProductClient productClient;
    
    public List<ProductInfoOutput> fun1(List<String> productIdList) {
    //通过调用添加FeignClient注解的接口中的方法实现了对其Api的访问
    return productClient.listForOrder(productIdList);   
    }
     public void fun2(List<DecreaseStockInput> decreaseStockInputList) {
    productClient.decreaseStock(decreaseStockInputList);
    }
  • Ribbon
    Ribbon和RestTemplate结合起来实现负载均衡,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值