亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

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
鹿泉市| 花莲市| 大连市| 德钦县| 滦平县| 新乐市| 绿春县| 余江县| 平定县| 海晏县| 金坛市| 连山| 抚松县| 洱源县| 托克托县| 新蔡县| 普安县| 崇文区| 教育| 巴林左旗| 怀集县| 雅安市| 敦煌市| 米林县| 县级市| 杨浦区| 桐柏县| 金阳县| 天峨县| 建湖县| 侯马市| 丰镇市| 成都市| 阿克| 万年县| 波密县| 河间市| 安仁县| 卢龙县| 江山市| 资中县|