1. 程式人生 > >SpringCloud——服務呼叫及自定義配置

SpringCloud——服務呼叫及自定義配置

Ribbon+RestTemplate:

(一)使用方式:


  1. 引入ribbon依賴;
  2. 在啟動類中例項化restTemplate例項並注入:
    @Bean
    @LoadBalanced //負載均衡器,實現請求的均勻分發
    RestTemplate restTemplate(){
        return new RestTemplate();
    }

RestTemplate相當於一個傳送http請求的客戶端,預設提供了各種傳送http請求的方法,有興趣的童鞋可以自己瞭解一下。

(二)自定義ribbon配置:
            Ribbon的預設定義類是”RibbonClientConfiguration

“,該類中預設配置了一些ribbon的配置項:
            這裡寫圖片描述
           例如請求規則、負載均衡策略等,也可以使用“@RibbonClient”註解對指定的服務採用不同的配置型別。例如:

@Configuration
public class MyRibbonConfig {

    //配置ribbon為隨機請求方式
    @Bean
    public IRule ribbonRule(){
        return new RandomRule();
    }

}
----------
@Configuration
@RibbonClient(name = "service-A"
,configuration = MyRibbonConfig.class) //為指定的服務使用指定的配置 public class TestConfiguration { ... }

Feign

feign是一種申明式的REST服務呼叫方式,它解決了使用resetTemplate呼叫中無法傳遞多個引數的問題。

(一)使用方式:

首先需要引入feign依賴,並在啟動類上新增@EnableFeignClients註解。

  1. 服務提供者中定義的介面:
@RestController
@RequestMapping("/user")
public class UserController
{
/** * 方法說明:根據使用者名稱獲取使用者 * @param: 使用者名稱 * @return: user */ @GetMapping(value = "/username/{username}") public User getUserByUsername(@PathVariable("username") String username){ return service.getUserByUsername(username); } }

     2. 服務消費者中定義介面呼叫服務提供者中的服務:

//使用Feign註解指明服務提供者
@FeignClient(name = "cms-admin")
@RequestMapping("/user")
public interface UserService {

    @GetMapping(value = "/username/{username}")
    User getUserByUsername(@PathVariable("username") String username);
}

     這樣就可以在其他地方使用UserService呼叫cms-admin服務中定義的方法了。
(三)自定義feign配置:

@Configuration
public class FeignConfiguration {

    /*
        @Bean
        public Contract feignContract(){
            return new feign.Contract.Default();
        }
    */
    //feign呼叫認證,需要引入對Security的依賴
    @Bean
    public BasicAuthRequestInterceptor basicAuthRequestInterceptor(){
        return new BasicAuthRequestInterceptor("user","123456");
    }
    //feign日誌設定
    @Bean
    Logger.Level feignLogger(){
        return Logger.Level.FULL;
    }

}
----------
//在feign客戶端上註明使用的配置類:
@FeignClient(name = "cms-admin",configuration = FeignConfiguration.class)