中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

springcloud負載均衡策略有哪些

小晨
278
2021-07-13 16:33:03
欄目: 云計算

springcloud負載均衡策略有:1、Ribbon,它是一個基于Netflix Ribbon實現的一套客戶端負載均衡工具;2、Fegin的配置,它是一個聲明式的Web服務客戶端,能夠更加容易編寫Web服務客戶端,只要在api層建設一個接口并添加注解即可。

springcloud負載均衡策略有哪些

具體內容如下:

1、Ribbon 

是基于Netflix Ribbon實現的一套客戶端 負載均衡的工具,類似Nginx主要功能時提供客戶端的軟件負載均衡算法LB就是負載均衡,集中式(F5),進程內(Nginx),消費者可以自動看從Eureka中拿到對應的服務列表,默認進行輪詢RoundRobinRule

下圖是RestTemplate的自帶的7中均衡策略

springcloud負載均衡策略有哪些我們在之前通過Ribbon+RestTemplate實現調用服務的時候,在獲取RestTemplate的方法上加了@LoadBalanced ,實現默認輪詢,如果需要更改其均衡策略,則在配置類中聲明想要的均衡策略

@Configuration

public class RestConfig {

    @Bean    //通過RestTemplate來實現調用接口

    @LoadBalanced     //表示RestTemplate開啟了負載均衡

    public RestTemplate getRestTemplate(){

        return  new RestTemplate();

    }

    //重新創建一個均衡策略,表示不使用默認

    @Bean

    public IRule getIReule(){ //通過獲取一個IRule對象,

        return  new RandomRule();  //達到的目的,用我們重新選擇的隨機,替代默認的輪訓方式

    }

}

2、消費者controller層

//聲明一個接口

//    private static  final String HTTP_NAME = "http://localhost:8001/product/";

    private static  final String HTTP_NAME = "http://MICROSERVICE-PRODUCT";

    @Autowired

    private RestTemplate restTemplate;

    @Resource

    private DiscoveryClient client;   //我這個微服務想要被別人去發現

    @GetMapping("/consum/find/{id}")

    public User findone(@PathVariable("id")Integer id){

        String url = HTTP_NAME+"/product/findone/"+id;

        return  (User) restTemplate.getForObject(url,User.class);

    }

    @GetMapping("/consum/findAll")

    public List<User> getAll(){

        List<User> users = restTemplate.getForObject(HTTP_NAME + "/product/list", List.class);

        return users;

    }

2、Fegin的配置 

Feign是一個聲明式的Web服務客戶端,使得編寫Web服務客戶端變得非常容易,在api層只需要創建一個接口,然后在上面添加注解即可

步驟如下:

(1)導入依賴,創建接口的微服務,以及消費者微服務都需要引入

 <!-- Feign依賴 -->

 <dependency>

     <groupId>org.springframework.cloud</groupId>

     <artifactId>spring-cloud-starter-openfeign</artifactId>

     <version>2.1.0.RELEASE</version>

</dependency>

(2)創建消費者層

@RestController

public class Usercontroller {

    @Resource  //調用的是API層的接口

    private UserService userService;

    @GetMapping("/consum/find/{id}")

    public User findone(@PathVariable("id")Integer id){

        return  userService.findById(id);

    }

    @GetMapping("/consum/findAll")

    public List<User> getAll(){

        return userService.findAll();

    }

}

(3)在消費者的模塊的啟動類上加上 @EnableFeignClients(basePackages = {"com.ghh"}) //掃描另外一個Feign的接口

@SpringBootApplication

@EnableEurekaClient

@EnableFeignClients(basePackages = {"com.ghh"}) //掃描另外一個Feign的接口

public class ConsumStart_Feign {

    public static void main(String[] args) {

        SpringApplication.run(ConsumStart_Feign.class,args);

    }

}

(4)在api層要創建一個接口,以及加上一個注解@FeignClient(value = "MICROSERVICE-PRODUCT"),表名調用的提供者或者服務名稱

@FeignClient(value = "MICROSERVICE-PRODUCT")

public interface UserService {

        @GetMapping("/product/findone/{id}")

        public User findById(@PathVariable("id") Integer id);

        @GetMapping("/product/list")

        public List<User> findAll();

}

三、Ribbon+RestTemplate和Feign的區別

 1、實際開發中,對服務依賴的調用可能不止一處,往往一個接口會被多處調用,如果使用Ribbon+RestTemplate,就需要在每一個模塊都要創建一個配置類,而且,各社區中javaweb也傾向于面向接口編程

 2、通常針對每個微服務自行封裝一些客戶端類來包裝這些依賴服務的調用,所以,Feign在此基礎上做了進一步封裝,在Feign的實現下,我們只需要創建一個接口并使用注解的方式來配置它(以前是Dao接口上面標注Mapper注解,現在是一個微服務接口上面標注一個Feign注解即可),完成對服務提供方的接口綁定

 3、使用Feign是通過接口的方法調用Rest服務,該請求發送給Eureka服務器,通過Feign直接找到服務接口。Feign融合了Ribbon技術,所以也支持負載均衡。

 4、在使用Feign的時候其實就是遠程通過調用標注微服務的對應接口(每一個方法上的路徑),來獲取返回值

0
汪清县| 腾冲县| 岳阳市| 南江县| 肃南| 深水埗区| 新昌县| 沁水县| 五常市| 田林县| 青阳县| 青铜峡市| 翁源县| 沁水县| 晋宁县| 洪泽县| 南江县| 黄大仙区| 阿拉善右旗| 桃园市| 曲周县| 双鸭山市| 平邑县| 阜南县| 仲巴县| 雅安市| 延津县| 潮州市| 新野县| 余姚市| 大悟县| 陵水| 中宁县| 平南县| 南澳县| 七台河市| 高阳县| 麻江县| 乡宁县| 黑水县| 新河县|