摘要:不和在同級目錄,因為文檔有說明,該配置文件不需要被掃描到。添加訪問層自定義控制器。添加電影微服務啟動類電影微服務使用定制化在客戶端進行負載均衡調度并為配置帳號密碼登錄認證。注解表示該電影微服務已經接入模塊。
SpringCloud(第 013 篇)電影微服務使用定制化 Feign 在客戶端進行負載均衡調度并為 Feign 配置帳號密碼登錄認證 Eureka
-
一、大致介紹1、定制 Feign 實現訪問遠端微服務; 2、為 Feign 配置帳號密碼來登錄認證 Eureka 服務發現模塊; 3、修改 Feign 的日志打印級別; 4、定制 Feign 也毫不掩飾的支持負載均衡調度功能;二、實現步驟 2.1 添加 maven 引用包
2.2 添加應用配置文件(springms-consumer-movie-feign-customsrcmainresourcesapplication.yml)4.0.0 springms-consumer-movie-feign-custom 1.0-SNAPSHOT jar com.springms.cloud springms-spring-cloud 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-eureka org.springframework.cloud spring-cloud-starter-feign
spring: application: name: springms-consumer-movie-feign-custom server: port: 8050 eureka: client: # healthcheck: # enabled: true serviceUrl: defaultZone: http://admin:admin@localhost:8761/eureka instance: prefer-ip-address: true instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}} logging: level: com.springms.cloud.feign.UserFeignCustomClient: DEBUG # 解決第一次請求報超時異常的方案,因為 hystrix 的默認超時時間是 1 秒,因此請求超過該時間后,就會出現頁面超時顯示 : # # 這里就介紹大概三種方式來解決超時的問題,解決方案如下: # # 第一種方式:將 hystrix 的超時時間設置成 5000 毫秒 # hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000 # # 或者: # 第二種方式:將 hystrix 的超時時間直接禁用掉,這樣就沒有超時的一說了,因為永遠也不會超時了 # hystrix.command.default.execution.timeout.enabled: false # # 或者: # 第三種方式:索性禁用feign的hystrix支持 feign.hystrix.enabled: false ## 索性禁用feign的hystrix支持 # 超時的issue:https://github.com/spring-cloud/spring-cloud-netflix/issues/768 # 超時的解決方案: http://stackoverflow.com/questions/27375557/hystrix-command-fails-with-timed-out-and-no-fallback-available # hystrix配置: https://github.com/Netflix/Hystrix/wiki/Configuration#execution.isolation.thread.timeoutInMilliseconds2.3 添加實體用戶類User(springms-consumer-movie-feign-customsrcmainjavacomspringmscloudentityUser.java)
package com.springms.cloud.entity; import java.math.BigDecimal; public class User { private Long id; private String username; private String name; private Short age; private BigDecimal balance; public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public String getUsername() { return this.username; } public void setUsername(String username) { this.username = username; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public Short getAge() { return this.age; } public void setAge(Short age) { this.age = age; } public BigDecimal getBalance() { return this.balance; } public void setBalance(BigDecimal balance) { this.balance = balance; } }2.4 添加訪問遠端服務 Feign 客戶端(springms-consumer-movie-feign-customsrcmainjavacomspringmscloudfeignUserFeignCustomClient.java)
package com.springms.cloud.feign; import com.springms.cloud.entity.User; import com.springms.config.TestFeignCustomConfiguration; import feign.Param; import feign.RequestLine; import org.springframework.cloud.netflix.feign.FeignClient; /** * 用戶Http請求的客戶端,FeignClient 注解地方采用了自定義的配置。 * * 注解FeignClient的傳參:表示的是注冊到 Eureka 服務上的模塊名稱。 * * @author hmilyylimh * * @version 0.0.1 * * @date 2017/9/19 * */ @FeignClient(name = "springms-provider-user", configuration = TestFeignCustomConfiguration.class) public interface UserFeignCustomClient { /** * 這里的注解 RequestLine、Param 是 Feign 的配置新的注解,詳細請參考鏈接:https://github.com/OpenFeign/feign * * @param id * @return */ @RequestLine("GET /simple/{id}") public User findById(@Param("id") Long id); } /**************************************************************************************** 參考代碼如下: interface GitHub { @RequestLine("GET /repos/{owner}/{repo}/contributors") List2.5 添加登錄認證Eureka服務 Feign 客戶端(springms-consumer-movie-feign-customsrcmainjavacomspringmscloudfeignUserFeignCustomSecondClient.java)contributors(@Param("owner") String owner, @Param("repo") String repo); } static class Contributor { String login; int contributions; } public static void main(String... args) { GitHub github = Feign.builder().decoder(new GsonDecoder()).target(GitHub.class, "https://api.github.com"); // Fetch and print a list of the contributors to this library. List contributors = github.contributors("OpenFeign", "feign"); for (Contributor contributor : contributors) { System.out.println(contributor.login + " (" + contributor.contributions + ")"); } } ****************************************************************************************/
package com.springms.cloud.feign; import com.springms.config.TestEurekaAuthConfiguration; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; /** * 用戶Http請求的客戶端,FeignClient 注解地方采用了自定義的配置。 * * 注解FeignClient的傳參:表示的是注冊到 Eureka 服務上的模塊名稱。 * * @author hmilyylimh * * @version 0.0.1 * * @date 2017/9/19 * */ @FeignClient(name = "xxx", url = "http://localhost:8761/", configuration = TestEurekaAuthConfiguration.class) public interface UserFeignCustomSecondClient { @RequestMapping(value = "/eureka/apps/{serviceName}") public String findEurekaInfo(@PathVariable("serviceName") String serviceName); }2.6 添加訪問遠端服務配置類(springms-consumer-movie-feign-customsrcmainjavacomspringmsconfigTestFeignCustomConfiguration.java)
package com.springms.config; import feign.Contract; import feign.Logger; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * 自定義配置。 * * 不和 com.springms.cloud 在同級目錄,因為文檔有說明,該配置文件不需要被掃描到。 * * @author hmilyylimh * * @version 0.0.1 * * @date 2017/9/19 * */ @Configuration public class TestFeignCustomConfiguration { @Bean public Contract feignContract(){ return new feign.Contract.Default(); } /** * 日志級別配置 * * @return */ @Bean Logger.Level feignLoggerLevel(){ return Logger.Level.FULL; } }2.7 添加登錄認證Eureka服務配置(springms-consumer-movie-feign-customsrcmainjavacomspringmsconfigTestEurekaAuthConfiguration.java)
package com.springms.config; import feign.auth.BasicAuthRequestInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * 認證配置,由于 UserFeignCustomSecondClient 訪問 http://localhost:8761/ 需要密碼登錄,所以才有了此配置的出現。 * * @author hmilyylimh * * @version 0.0.1 * * @date 2017/9/19 * */ @Configuration public class TestEurekaAuthConfiguration { /** * 此方法主要配置登錄 Eureka 服務器的帳號與密碼。 * * @return */ @Bean public BasicAuthRequestInterceptor basicAuthRequestInterceptor(){ return new BasicAuthRequestInterceptor("admin", "admin"); } }2.8 添加Web訪問層Controller(springms-consumer-movie-feign-customsrcmainjavacomspringmscloudcontrollerMovieFeignCustomController.java)
package com.springms.cloud.controller; import com.springms.cloud.entity.User; import com.springms.cloud.feign.UserFeignCustomClient; import com.springms.cloud.feign.UserFeignCustomSecondClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; /** * 自定義 Feign 控制器。 * * @author hmilyylimh * * @version 0.0.1 * * @date 2017/9/19 * */ @RestController public class MovieFeignCustomController { @Autowired private UserFeignCustomClient userFeignCustomClient; @Autowired private UserFeignCustomSecondClient userFeignCustomSecondClient; @GetMapping("/movie/{id}") public User findById(@PathVariable Long id) { return userFeignCustomClient.findById(id); } @GetMapping("/{serviceName}") public String findEurekaInfo(@PathVariable String serviceName){ return userFeignCustomSecondClient.findEurekaInfo(serviceName); } }2.9 添加電影微服務啟動類(springms-consumer-movie-feign-customsrcmainjavacomspringmscloudMsConsumerMovieFeignCustomApplication.java)
package com.springms.cloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.feign.EnableFeignClients; /** * * 電影微服務使用定制化 Feign 在客戶端進行負載均衡調度并為 Feign 配置帳號密碼登錄認證 Eureka。 * * Feign: Java HTTP 客戶端開發的工具。 * * 注解 EnableFeignClients 表示該電影微服務已經接入 Feign 模塊。 * * @author hmilyylimh * * @version 0.0.1 * * @date 2017/9/19 * */ @SpringBootApplication @EnableEurekaClient @EnableFeignClients public class MsConsumerMovieFeignCustomApplication { public static void main(String[] args) { SpringApplication.run(MsConsumerMovieFeignCustomApplication.class, args); System.out.println("【【【【【【 電影自定義Feign微服務 】】】】】】已啟動."); } }三、測試
/**************************************************************************************** 一、電影微服務使用定制化Feign在客戶端進行負載均衡調度并為Feign配置帳號密碼登錄認證Eureka(測試接入 Feign 模塊): 1、注解:EnableFeignClients 2、啟動 springms-discovery-eureka 模塊服務,啟動1個端口; 3、啟動 springms-provider-user 模塊服務,啟動1個端口; 4、啟動 springms-consumer-movie-feign-custom 模塊服務; 5、在瀏覽器輸入地址http://localhost:8050/movie/1 可以看到信息成功的被打印出來; 總結:說明接入 Feign 已經成功通過測試; ****************************************************************************************/ /**************************************************************************************** 二、電影微服務使用定制化Feign在客戶端進行負載均衡調度并為Feign配置帳號密碼登錄認證Eureka(測試登錄 Eureka 服務器需要認證配置): 1、注解:EnableFeignClients 2、啟動 springms-discovery-eureka 模塊服務,啟動1個端口; 3、啟動 springms-provider-user 模塊服務,啟動1個端口; 4、啟動 springms-consumer-movie-feign-custom 模塊服務; 5、在瀏覽器輸入地址 http://localhost:8050/springms-provider-user 可以看到信息成功的被打印出來; 總結:說明 TestEurekaAuthConfiguration 類中配置的帳號密碼已經生效,可以正常訪問 Eureka 服務; ****************************************************************************************/ /**************************************************************************************** 三、電影微服務使用定制化Feign在客戶端進行負載均衡調度并為Feign配置帳號密碼登錄認證Eureka(測試接入 Feign 模塊進行負載均衡): 1、注解:EnableFeignClients 2、啟動 springms-discovery-eureka 模塊服務,啟動1個端口; 3、啟動 springms-provider-user 模塊服務,啟動3個端口(7900、7899、7898); 4、啟動 springms-consumer-movie-feign-custom 模塊服務; 5、在瀏覽器輸入地址http://localhost:8050/movie/1 連續刷新9次,正常情況可以看到 springms-provider-user 的3個端口輪詢打印用戶日志信息; 總結:1、說明接入 Feign 已經成功的在客戶端進行了負載均衡處理; 2、之所以會在客戶端進行輪詢打印日志信息,是因為沒有配置調度算法,而默認的調度算法就是輪詢,所以會出現輪詢打印日志信息; ****************************************************************************************/ /**************************************************************************************** 四、電影微服務使用定制化Feign在客戶端進行負載均衡調度并為Feign配置帳號密碼登錄認證Eureka(配置日志級別): 1、application.yml 修改:logging.level.com.springms.cloud.feign.UserFeignCustomClient: DEBUG 2、編寫 TestFeignCustomConfiguration 新增日志級別的方法 3、啟動 springms-discovery-eureka 模塊服務,啟動1個端口; 4、啟動 springms-provider-user 模塊服務,啟動1個端口; 5、啟動 springms-consumer-movie-feign-custom 模塊服務; 6、在瀏覽器輸入地址http://localhost:8050/springms-provider-user 可以看到控制臺中 DEBUG 日志級別的信息成功的被打印出來; ****************************************************************************************/四、下載地址
https://gitee.com/ylimhhmily/SpringCloudTutorial.git
SpringCloudTutorial交流QQ群: 235322432
SpringCloudTutorial交流微信群: 微信溝通群二維碼圖片鏈接
歡迎關注,您的肯定是對我最大的支持!!!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70497.html
摘要:在該配置中,加入這個方法的話,表明使用了該配置的地方,就會禁用該模塊使用容災降級的功能添加訪問層添加電影微服務啟動類電影微服務,定制,一個功能禁用,另一個功能啟用。 SpringCloud(第 016 篇)電影微服務,定制Feign,一個Feign功能禁用Hystrix,另一個Feign功能啟用Hystrix - 一、大致介紹 1、在一些場景中,部分功能需要使用斷路器功能,部分功能不需...
摘要:添加電影微服務啟動類電影微服務接入進行客戶端負載均衡,通過調用遠程微服務。注解表示該電影微服務已經接入模塊。 SpringCloud(第 012 篇)電影微服務接入 Feign 進行客戶端負載均衡,通過 FeignClient 調用遠程 Http 微服務 - 一、大致介紹 1、本章節主要介紹在 SpringCloud 生態圈中,使用一個類似于 Java HTTP 客戶端的工具 Feig...
摘要:服務器充當微服務架構體系中的服務注冊中心。其他的微服務,使用客戶端連接到,并維持心跳連接,系統維護人員可以通過來監控系統中各個微服務是否正常運行。 當前微服務架構逐漸成為系統開發的主流方向,搭建微服務方式可以有多種,例如springcloud、dubbo、k8s等,本系列文章將基于本人參與的實際項目,來介紹基于springcloud搭建微服務的方式,Spring Cloud是一個基于S...
摘要:系統中的各個微服務可被獨立部署,各個微服務之間是松耦合的。每個微服務僅關注于完成一件任務并很好地完成該任務。傳統架構升級困難。新的輕量級協議容器化的出現。熔斷處理在微服務出現問題時防止出現雪崩效應。 聊完Spring Boot,我們來看看Spring Boot最重要的一方面的應用——Spring Cloud。 Spring Cloud 再聊SpringCloud之前我們先聊聊微服務。 ...
摘要:服務發現服務治理注冊中心將所有微服務注冊到一個上,然后通過心跳進行服務健康監測。 服務發現 | 服務治理 | 注冊中心 將所有微服務注冊到一個Server上,然后通過心跳進行服務健康監測。這樣服務A調用服務B可以通過注冊中心獲取服務B的地址、端口調用 Eureka - Eureka 提供云端服務發現,一個基于 REST 的服務,用于定位服務,以實現云端中間層服務發現和故障轉移 S...
閱讀 2849·2021-11-22 11:56
閱讀 3553·2021-11-15 11:39
閱讀 898·2021-09-24 09:48
閱讀 759·2021-08-17 10:14
閱讀 1322·2019-08-30 15:55
閱讀 2753·2019-08-30 15:55
閱讀 1310·2019-08-30 15:44
閱讀 2774·2019-08-30 10:59