微服务 Dropwizard 译<八>

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已不复存在,它们容许一个应用程序删除整个应用程序集,由于它们共享相同的进程空间。数据库

The Dropwizard Stack

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

相关文章
相关标签/搜索