作者:Angela Stringfellow
翻译:雁惊寒
译者注:本文首先简单介绍了微服务的概念以及使用微服务所能带来的优势,然后结合实例介绍了几个常见的 Java 微服务框架。以下是译文。
微服务在开发领域的应用越来越广泛,因为开发人员致力于创建更大、更复杂的应用程序,而这些应用程序作为微小服务的组合能够更好地得以开发和管理。这些微小的服务可以组合在一起工作,并实现更大、应用更广泛的功能。现在出现了很多的工具来满足使用逐段法而不是一次性地设计和构建应用程序的所有需求。今天,我们来看一下什么是微服务、使用微服务的好处,以及几个代码示例。
微服务是什么?微服务是一种面向服务的架构风格(Java 开发人员最重要的技能之一),其中,应用程序被构建为多个不同的小型服务的集合而不是单个应用程序。与单个程序不同的是,微服务让你可以同时运行多个独立的应用程序,而这些独立的应用程序可以使用不同的编码或编程语言来创建。庞大而又复杂的应用程序可以由多个可自行执行的简单而又独立的程序所组成。这些较小的程序组合在一起,可以提供庞大的单程序所具备的所有功能。
微服务捕获了你的业务场景,回答了 "你想要试着解决什么问题" 这个问题。微服务的开发团队的成员数量比较少,而且可以用任何语言、任何框架进行开发。每个相关的程序都是独立地版本化、执行和扩展。这些微服务可以与其他微服务进行交互,并且具有唯一的 URL 或名字,同时,即使遇到故障,也能始终保持可用性和一致性。
微服务能带来哪些好处?使用微服务能带来多个好处,其中有一个好处是,由于这些较小的应用程序无需使用相同的编程语言,因此,开发人员可以使用他们最熟悉的语言。这有助于开发人员用更低的成本和更少的错误来开发程序。灵活性和低成本这两个特点也表现在可以将这些较小的程序重用在其他项目中,从而使其更有效率。
几个 Java 微服务框架的例子这里有几个可用于 Java 开发的微服务框架:
你也可以考虑使用其他一些框架,包括:Dropwizard、Ninja web 框架、Play 框架、RestExpress、Restlet、Restx 和 Spark Framework。
如何使用 DropWizard 来创建微服务DropWizard 将成熟稳定的 Java 库集成在一个轻量级的包中,你可以在自己的应用程序中使用这个包。它使用了 Jetty for HTTP、Jersey for REST 和 Jackson for JSON,以及 Metrics、Guava、Logback、Hibernate Validator、Apache HttpClient、Liquibase、Mustache、Joda Time 和 Freemarker。
你可以使用 Maven 来设置 Dropwizard 应用程序。怎么做呢?
在你的 POM 文件中,添加一个 dropwizard.version 属性,值为 DropWizard 的最新版本。
- <properties>
- <dropwizard.version>
- LATEST VERSION
- </dropwizard.version>
- </properties>
- <!--Then list the dropwizard-core library:-->
- <dependencies>
- <dependency>
- <groupId>
- io.dropwizard
- </groupId>
- <artifactId>
- dropwizard-core
- </artifactId>
- <version>
- ${version}
- </version>
- </dependency>
- </dependencies>
这将为你设置一个 Maven 项目。在这里,你可以创建配置类、应用程序类、表现类,资源类或一个健康检查,还可以构建 Fat JARS,然后运行应用程序。
在 此链接 中可以查看 Dropwizard 用户手册, 这个链接 是 GitHub 库。
示例代码:
Spring Boot 微服务
- package com.example.helloworld;
- import com.yammer.dropwizard.config.Configuration;
- import com.fasterxml.jackson.annotation.JsonProperty;
- import org.hibernate.validator.constraints.NotEmpty;
- public class HelloWorldConfiguration extends Configuration {
- @NotEmpty
- @JsonProperty
- private String template;
- @NotEmpty
- @JsonProperty
- private String defaultName = "Stranger";
- public String getTemplate() {
- return template;
- }
- public String getDefaultName() {
- return defaultName;
- }
- }
Spring Boot 让你可以通过嵌入式服务器将它提供的 Java 应用程序与你自己的应用程序一起使用。它使用了 Tomcat,因此你不必使用其他的 Java EE 容器。Spring Boot 的教程示例可以访问 这里 。
你可以在 这里 找到所有的 Spring Boot 工程,你会发现 Spring Boot 拥有你的应用程序所需的所有基础架构。无论你是在编写安全类、配置类或是大数据类的应用程序,总能找到对应的 Spring Boot 工程。
Spring Boot 的工程包括:
- Spring IO Platform:用于版本化应用程序的企业级分发。
- Spring Framework:用于事务管理、依赖注入、数据访问、消息传递和 Web 应用程序。
- Spring Cloud:用于分布式系统,用于构建或部署你的微服务。
- Spring Data:用于与数据访问相关的微服务,不管是映射还是归约,关系型还是非关系型。
- Spring Batch:用于高级别的批量操作。
- Spring Security:用于授权和认证支持。
- Spring REST 文档:用于 RESTful 服务文档化。
- Spring Social:用于连接社交媒体 API。
- Spring Mobile:适用于移动网络应用。
示例代码:
Jersey
- import org.springframework.boot.*;
- import org.springframework.boot.autoconfigure.*;
- import org.springframework.stereotype.*;
- import org.springframework.web.bind.annotation.*;
- @RestController
- @EnableAutoConfiguration
- public class Example {
- @RequestMapping("/")
- String home() {
- return "Hello World!";
- }
- public static void main(String[] args) throws Exception {
- SpringApplication.run(Example.class, args);
- }
- }
Jersey RESTful 框架是开源的,它基于 JAX-RS 规范。Jersey 应用程序可以扩展现有的 JAX-RS 实现,并通过添加功能和实用工具,使得 RESTful 服务更为简单,客户端开发变得更加轻松。
Jersey 最好的一点是,它的文档很详细,有很多例子。它的速度很快,路由也非常简单。
关于如何开始使用 Jersey 的文档在 这里 ,而更多的文档可以在 这里 找到。
你可以尝试运行下面的示例代码:
- package org.glassfish.jersey.examples.helloworld;
- import javax.ws.rs.GET;
- import javax.ws.rs.Path;
- import javax.ws.rs.Produces;
- @Path("helloworld")
- public class HelloWorldResource {
- public static final String CLICHED_MESSAGE = "Hello World!";
- @GET
- @Produces("text/plain")
- public String getHello() {
- return CLICHED_MESSAGE;
- }
- }
Jersey 可以很容易地与其他库一起使用,如 Netty 或 Grizzly,它支持异步连接。它不需要 servlet 容器。然而,它确实很粗鲁地依赖注入实现。
Play 框架Play 框架可以让你很方便地使用 Scala 和 Java 来构建、创建和部署 Web 应用程序。对于需要并行处理远程调用的 RESTful 应用程序来说,Play 框架是理想的选择。它是模块化的,支持异步。Play 框架的社区也是所有微服务框架中最大的社区之一。
你可以尝试运行下面的示例代码:
Restlet
- package controllers;
- import play.mvc.*;
- public class Application extends Controller {
- public static void index() {
- render();
- }
- public static void sayHello(String myName) {
- render(myName);
- }
- }
Restlet 可以帮助开发人员创建遵循 RESTful 架构模式的快速而又可扩展的 Web API。它具有不错的路由和过滤功能,可用于 Java SE/EE、OSGi、Google AppEngine(Google Compute 的一部分)、Android 和其他主要的平台。
由于它的社区是封闭的,因此 Restlet 的学习曲线比较陡峭,但是你可以从 StackOverflow 上获得帮助。
示例代码:
- package firstSteps;
- import org.restlet.resource.Get;
- import org.restlet.resource.ServerResource;
- /**
- * Resource which has only one representation.
- */
- public class HelloWorldResource extends ServerResource {
- @Get
- public String represent() {
- return "hello, world";
- }
- }
有关微服务更多的资源和教程 要进一步阅读有关微服务的信息以及教程,请访问以下资源:
来源: http://www.tuicool.com/articles/6b6zI3n