您好,登錄后才能下訂單哦!
前言
為什么要使用微服務?
隨著互聯網的快速發展,各行各業都在用互聯網。互聯網已經離不開人們的形形×××。隨著越來越多的用戶,業務場景也愈來愈復雜。
傳統的單體架構已經很難滿足互聯網技術發展的要求,代碼可維護性擴展性和可讀性降低,維護成本的提高都是驅動微服務的發展趨勢。
Dubbo,是阿里巴巴服務化治理的核心框架,并被廣泛應用于阿里巴巴集團的各成員站
點。阿里巴巴近幾年對開源社區的貢獻不論在國內還是國外都是引人注目的,比如:
JStorm 捐贈給 Apache 并加入 Apache 基金會等,為中國互聯網人爭足了面子,使得阿
里巴巴在國人眼里已經從電商升級為一家科技公司了。
Spring Cloud,從命名我們就可以知道,它是 Spring Source 的產物,Spring 社區的強
大背書可以說是 Java 企業界最有影響力的組織了,除了 Spring Source 之外,還有
Pivotal 和 Netfix 是其強大的后盾與技術輸出。其中 Netflix 開源的整套微服務架構套件是
Spring Cloud 的核心。
首先需要有處理網絡連接通訊的模塊,負責連接建立、管理和消息的傳輸。其次需要有編
解碼的模塊,因為網絡通訊都是傳輸的字節碼,需要將我們使用的對象序列化和反序列
化。剩下的就是客戶端和服務器端的部分,服務器端暴露要開放的服務接口,客戶調用服
務接口的一個代理實現,這個代理實現負責收集數據、編碼并傳輸給服務器然后等待結果
返回。
dubbo 作為 rpc 框架,實現的效果就是調用遠程的方法就像在本地調用一樣。如何做到
呢?就是本地有對遠程方法的描述,包括方法名、參數、返回值,在 dubbo 中是遠程和本
地使用同樣的接口;然后呢,要有對網絡通信的封裝,要對調用方來說通信細節是完全不
可見的,網絡通信要做的就是將調用方法的屬性通過一定的協議(簡單來說就是消息格
式)傳遞到服務端;服務端按照協議解析出調用的信息;執行相應的方法;在將方法的返
回值通過協議傳遞給客戶端;客戶端再解析;在調用方式上又可以分為同步調用和異步調
用;簡單來說基本就這個過程
Spring Boot 的優點有:
減少開發,測試時間和努力。
使用 JavaConfig 有助于避免使用 XML。
避免大量的 Maven 導入和各種版本沖突。
提供意見發展方法。
通過提供默認值快速開始開發。
沒有單獨的 Web 服務器需要。這意味著你不再需要啟動 Tomcat,Glassfish 或其他任何東
西。
需要更少的配置 因為沒有 web.xml 文件。只需添加用@ Configuration 注釋的類,然后添加
用@Bean 注釋的方法,Spring 將自動加載對象并像以前一樣對其進行管理。您甚至可以將
@Autowired 添加到 bean 方法中,以使 Spring 自動裝入需要的依賴關系中。
基于環境的配置 使用這些屬性,您可以將您正在使用的環境傳遞到應用程序:-
Dspring.profiles.active = {enviornment}。在加載主應用程序屬性文件后,Spring 將在
(application{environment} .properties)中加載后續的應用程序屬性文件。
如何實現 Spring Boot 應用程序的安全性?
為了實現 Spring Boot 的安全性,我們使用 spring-boot-starter-security 依賴項,并且必須添
加安全配置。它只需要很少的代碼。配置類將必須擴展 WebSecurityConfigurerAdapter 并覆
蓋其方法。
如何集成 Spring Boot 和 ActiveMQ?
對于集成 Spring Boot 和 ActiveMQ,我們使用
spring-boot-starter-activemq
依賴關系。 它只需要很少的配置,并且不需要樣板代碼。
什么是 Swagger?你用 Spring Boot 實現了它嗎?
Swagger 廣泛用于可視化 API,使用 Swagger UI 為前端開發人員提供在線沙箱。Swagger 是
用于生成 RESTful Web 服務的可視化表示的工具,規范和完整框架實現。它使文檔能夠以
與服務器相同的速度更新。當通過 Swagger 正確定義時,消費者可以使用最少量的實現邏
輯來理解遠程服務并與其進行交互。因此,Swagger 消除了調用服務時的猜測。
使用 Spring Boot 開發分布式微服務時,我們面臨以下問題
與分布式系統相關的復雜性-這種開銷包括網絡問題,延遲開銷,帶寬問題,安全問題。
服務發現-服務發現工具管理群集中的流程和服務如何查找和互相交談。它涉及一個服務目錄,在該目錄中注冊服務,然后能夠查找并連接到該目錄中的服務。
冗余-分布式系統中的冗余問題。
負載平衡 --負載平衡改善跨多個計算資源的工作負荷,諸如計算機,計算機集群,網絡鏈路,中央處理單元,或磁盤驅動器的分布。
性能-問題 由于各種運營開銷導致的性能問題。
部署復雜性-Devops 技能的要求。
在計算中,負載平衡可以改善跨計算機,計算機集群,網絡鏈接,中央處理單元或磁盤驅動器等多種計算
資源的工作負載分布。負載平衡旨在優化資源使用,最大化吞吐量,最小化響應時間并避免任何單一資源
的過載。使用多個組件進行負載平衡而不是單個組件可能會通過冗余來提高可靠性和可用性。負載平衡通常涉及專用軟件或硬件,例如多層交換機或域名系統服務器進程。
什么是 Netflix Feign?它的優點是什么?
Feign 是受到 Retrofit,JAXRS-2.0 和 WebSocket 啟發的 java 客戶端聯編程序。Feign 的第一個目標
是將約束分母的復雜性統一到 http apis,而不考慮其穩定性。在 employee-consumer 的例子中,我們
使用了 employee-producer 使用 REST 模板公開的 REST 服務。
但是我們必須編寫大量代碼才能執行以下步驟
使用功能區進行負載平衡。
獲取服務實例,然后獲取基本 URL。
利用 REST 模板來使用服務。 前面的代碼如下
@Controller
public class ConsumerControllerClient {
@Autowired
private LoadBalancerClient loadBalancer;
public void getEmployee() throws RestClientException, IOException {
ServiceInstance serviceInstance=loadBalancer.choose("employee-producer");
System.out.println(serviceInstance.getUri());
String baseUrl=serviceInstance.getUri().toString();
baseUrl=baseUrl+"/employee";
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response=null;
try{
response=restTemplate.exchange(baseUrl,
HttpMethod.GET, getHeaders(),String.class);
}catch (Exception ex)
{
System.out.println(ex);
}
System.out.println(response.getBody());
}
之前的代碼,有像 NullPointer 這樣的例外的機會,并不是最優的。我們將看到如何使用 Netflix Feign使呼叫變得更加輕松和清潔。如果 Netflix Ribbon 依賴關系也在類路徑中,那么 Feign 默認也會負責負載平衡。
喜歡文章記得點個贊,感謝支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。