日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Springcloud--Ribbon組件來實現服務調用的負載均衡

作者:吃不飽肉的貓 更新時間: 2022-08-30 編程語言

1.什么是負載均衡 nginx

通俗的講, 負載均衡就是將負載(工作任務,訪問請求)進行分攤到多個操作單元(服務器,組件)上進行執行。

根據負載均衡發生位置的不同,一般分為服務端負載均衡客戶端負載均衡

服務端負載均衡指的是發生在服務提供者一方,比如常見的nginx負載均衡。

而客戶端負載均衡指的是發生在服務請求的一方,也就是在發送請求之前已經選好了由哪個實例處理請求。

我們在微服務調用關系中一般會選擇客戶端負載均衡,也就是在服務調用的一方來決定服務由哪個提供者執行.。

2.自定義實現負載均衡

2.1通過idea再啟動一個 shop-product 微服務,設置其端口為8082

2.2在Nacos注冊中心查看自己微服務的啟動狀態(是否是多個服務)

2.3修改controller代碼實現負載均衡

@Service
public class OrderServiceImpl01 implements OrderService {

    @Autowired
    private OrderMapper orderMapper;

    //該類默認沒有交于spring管理
    @Autowired
    private RestTemplate restTemplate;

    @Override
    public String saveOrder(Integer pid,Integer num) {
        Order order = new Order();
        order.setNumber(num);
        //用戶的信息可以從登錄者的token中redis獲取用戶信息
        order.setUsername("king");
        order.setUid(1);


        //需要設置訂單對象中商品的信息
        //商品操作都在商品微服務---訂單微服務遠程調用商品微服務即可拿到商品信息,遠程調用:http協議的restFul風格調用適合微服務,基于TCP協議的RPC調用適合SOA分布式
        //一定采用的為http協議:(1)自己寫代碼完成http調用【httpclient】微信支付---適合調用第三方網址。(2) spring提高了一個工具類RestTemplate,該類也是基于http協議的
        //restTemplate調用處必須是 http://服務提供者的名稱/服務提供資源路徑
        Product product = restTemplate.getForObject("http://springcloud-product/product/findById/" + pid, Product.class);
        order.setPid(product.getPid());
        order.setPname(product.getPname());
        order.setPprice(product.getPprice());
        orderMapper.insert(order);
        return "添加訂單成功";
    }
}

啟動兩個服務提供者和一個服務消費者,多訪問幾次消費者測試效果。

3.基于Ribbon實現負載均衡 ---組件

3.1什么是Ribbon

1.是 Netflix?發布的一個負載均衡器,有助于控制 HTTP 和 TCP客戶端行為。在 SpringCloud 中, nacos一般配合Ribbon進行使用,Ribbon提供了客戶端負載均衡的功能,Ribbon利用從nacos中讀 取到的服務信息,在調用服務節點提供的服務時,會合理(策略)的進行負載。 在SpringCloud中可以將注冊中心和Ribbon配合使用,Ribbon自動的從注冊中心中獲取服務提供者的 列表信息,并基于內置的負載均衡算法,請求服務

2.是 Netflix?發布的一個負載均衡器Ribbon自動的從注冊中心中獲取服務提供者的 列表信息并基于內置的負載均衡算法請求服務

3.2Ribbon的主要作用

(1)服務調用

基于Ribbon實現服務調用, 是通過拉取到的所有服務列表組成(服務名-請求路徑的)映射關系。借助 RestTemplate 最終進行調用

(2)負載均衡

當有多個服務提供者時,Ribbon可以根據負載均衡的算法自動的選擇需要調用的服務地址,?RibbonSpring Cloud的一個組件, 它可以讓我們使用一個注解就能輕松的搞定負載均衡。

1.在RestTemplate 的生成方法上添加@LoadBalanced注解

@Bean
    //ribbon借助RestTemplate完成負載均衡的調用
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

2.修改服務調用的方法?

@Autowired
    private ProductFeign productFeign;

    @Override
    public Product saveOrder(Integer pid,Integer num) {
        Order order = new Order();
        order.setNumber(num);
        //用戶的信息可以從登錄者的token中redis獲取用戶信息
        order.setUsername("king");
        order.setUid(1);
        System.out.println(pid);
        Product product = productFeign.selectProduct(pid);
        System.out.println(product);
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~遠程查詢的商品結果~~~~~~~~~~~~~~~~~~"+product);

        order.setPid(product.getPid());
        order.setPname(product.getPname());
        order.setPprice(product.getPprice());
        orderMapper.insert(order);
        return product;
    }

4.Ribbon支持的負載均衡策略

Ribbon內置了多種負載均衡策略,內部負載均衡的頂級接口為

com.netflix.loadbalancer.IRule , 具體的負載策略如下圖所示:

我們可以通過修改配置來調整Ribbon的負載均衡策略,具體代碼如下:

#指定ribbeon負載均恒的策略 ?springcloud-product為我自己的服務器名稱
springcloud-product.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
?

原文鏈接:https://blog.csdn.net/JAVA_SR/article/details/126592756

欄目分類
最近更新