DropWizard是在SpringBoot或WildFlySwarn(咱們在本書中討論的另外兩個微服務框架)以前就已經有啦。它的第一個版本,v0.1.0,於2011發佈。在撰寫本文時,v0.9.2是最新版本,1.0即將面世。DropWizard是Coda Hale建立的,目的是爲公司的分佈式系統體系結構(如今稱爲微服務!)提供動力,極大地利用JVM。它最初是一組膠水代碼,用來組合一些強大的庫來編寫 rest web 服務,自那時以來一直在發展,儘管它仍然保持其做爲最低限度的、生產就緒的、易於使用的web框架工做的身份。git
DropWizard是一個自成體系的框架,就像SpringBoot;可是,它比SpringBoot有更多的說明性。有些組件只是框架的一部分,不容易更改。甜蜜的使用用例是編寫基於REST的web應用程序/微服務,而不須要太多花哨的裝飾。例如,DropWizard爲您選擇了servlet容器(Jetty)、REST庫(Jersey)以及序列化和反序列化(Jackson)格式。若是您想切換的話(例如,將servlet容器更改成Undertto),將它們更改出來並非很簡單的事情。github
DropWizard也不附帶依賴注入容器(如Spring或CDI)。您能夠添加一個,但DropWizard傾向於保持微服務開發的簡單性,而不須要任何魔法。Spring Boot向您隱藏了許多潛在的複雜性,由於Spring很是複雜(也就是說,將Spring運行所需的全部bean都管理起來並不簡單),而且隱藏了大量帶有Java註釋的bean鏈接。雖然註釋能夠很方便,而且在某些方面能夠節省不少樣板,可是在調試生產應用程序時,魔力越大,效果就越顯著。DropWizard更喜歡公開全部的東西,而且很是明確地說明什麼是鏈接起來的,以及如何將它們組合在一塊兒。若是您須要進入調試器,行號和堆棧跟蹤應該與源代碼很是匹配。web
就像SpringBoot同樣,DropWizard更喜歡將整個項目捆綁到一個可執行的 jar 中。這樣,開發人員就沒必要擔憂須要在哪一個應用服務器中運行以及如何部署和配置應用服務器。應用程序不是以 war 的形式構建的,也不受複雜的類裝入器的影響。DropWizard應用程序中的類加載器是平面的,這與嘗試在應用程序服務器中運行應用程序是徹底不一樣的,在應用服務器中可能有許多類加載器的層次結構或圖形。計算不一樣服務器之間的類負載順序可能會致使一個具備依賴衝突和運行時問題(例如nosuchMethod Error)的COM部署環境。在本身的進程中運行微服務能夠隔離應用程序,這樣您就能夠根據須要單獨調優每一個JVM,並使用操做人員很是熟悉的操做系統工具監視它們。GC或OutOfMemyExceptions已不復存在,它們容許一個應用程序刪除整個應用程序集,由於它們共享相同的進程空間。數據庫
DropWizard在這些強大的庫之上提供了一些很是直觀的抽象,使編寫生產就緒的微服務變得很是容易:編程
• Jetty 做爲 servlet容器
• Jersey 做爲 REST/JAX-RS實現, Jackson 做爲 JSON 序列化和反序列化服務器
• HibernateValidator
• Guava
• Metrics
• Logback + SLF4J框架
• JDBI 處理 databases分佈式
DropWizard很是執拗己見,認爲「只要開始寫代碼就好了」。折中的是,若是你想修補底層堆棧,這不是很容易.。另外一方面,快速啓動和運行以便交付業務價值要比本身配置組件容易得多。Jetty、Jeresy和Jackson都是著名的生產級庫,用於編寫基於REST的服務。谷歌的Guava庫提供實用程序和不可變的編程。DropizerMetrics庫是一個很是強大的度量庫,它提供了足夠的洞察力來管理生產中的服務。事實上,Metrics庫是如此強大和流行,它被衍生爲本身的項目,能夠與SpringBoot或WildFlySwarn一塊兒使用。微服務
DropWizard公開了開發人員應該熟悉的如下抽象。若是您可以理解這些簡單的抽象概念,那麼使用DropWizard就會很是有效率:工具
Application(應用)
包含咱們的 public void main() 方法
Environment(環境)
咱們把servlet、資源、過濾器、健康檢查、任務、命令等放在哪裏
Configuration(配置)
如何注入特定環境和應用程序的配置
Commands (命令)
告訴DropWizard啓動微服務時要採起的操做(例如,啓動服務器)
Resources(資源)
REST/JAX-RS
Tasks
管理應用程序時要執行的管理任務(如更改日誌級別或暫停數據庫鏈接)
當在開箱即用的狀況下運行DropWizard應用程序時,建立一個Jetty服務器使用兩個處理程序:一個用於應用程序(默認狀況下爲8080),另外一個用於管理接口(默認狀況下爲8081)。該向導這樣作是爲了讓您能夠公開您的微服務,而無需在同一端口上公開管理詳細信息(例如,能夠將8081保留在防火牆以後,所以沒法訪問)。像度量和健康檢查這樣的事情會經過管理端口公開,因此要注意適當地保護它。
原文:
做者源碼:https://github.com/redhat-developer/microservices-by-example-source