转载地址:http://geek.csdn.net/news/detail/203961 html
原文地址: Java Microservices: Code Examples, Tutorials, and More java
微服务在开发领域的应用愈来愈普遍,由于开发人员致力于建立更大、更复杂的应用程序,而这些应用程序做为微小服务的组合可以更好地得以开发和管理。这些微小的服务能够组合在一块儿工做,并实现更大、应用更普遍的功能。如今出现了不少的工具来知足使用逐段法而不是一次性地设计和构建应用程序的全部需求。今天,咱们来看一下什么是微服务、使用微服务的好处,以及几个代码示例。nginx
微服务是一种面向服务的架构风格(Java开发人员最重要的技能之一),其中,应用程序被构建为多个不一样的小型服务的集合而不是单个应用程序。与单个程序不一样的是,微服务让你能够同时运行多个独立的应用程序,而这些独立的应用程序可使用不一样的编码或编程语言来建立。庞大而又复杂的应用程序能够由多个可自行执行的简单而又独立的程序所组成。这些较小的程序组合在一块儿,能够提供庞大的单程序所具有的全部功能。git
微服务捕获了你的业务场景,回答了“你想要试着解决什么问题”这个问题。微服务的开发团队的成员数量比较少,并且能够用任何语言、任何框架进行开发。每一个相关的程序都是独立地版本化、执行和扩展。这些微服务能够与其余微服务进行交互,而且具备惟一的URL或名字,同时,即便遇到故障,也能始终保持可用性和一致性。github
使用微服务能带来多个好处,其中有一个好处是,因为这些较小的应用程序无需使用相同的编程语言,所以,开发人员可使用他们最熟悉的语言。这有助于开发人员用更低的成本和更少的错误来开发程序。灵活性和低成本这两个特色也表如今能够将这些较小的程序重用在其余项目中,从而使其更有效率。web
这里有几个可用于Java开发的微服务框架:spring
你也能够考虑使用其余一些框架,包括:Dropwizard、Ninja Web框架、Play框架、RestExpress、Restlet、Restx和Spark Framework。编程
DropWizard将成熟稳定的Java库集成在一个轻量级的包中,你能够在本身的应用程序中使用这个包。它使用了Jetty for HTTP、Jersey for REST和Jackson for JSON,以及Metrics、Guava、Logback、Hibernate Validator、Apache HttpClient、Liquibase、Mustache、Joda Time和Freemarker。api
你可使用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库。
示例代码:
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:适用于移动网络应用。
示例代码:
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框架可让你很方便地使用Scala和Java来构建、建立和部署Web应用程序。对于须要并行处理远程调用的RESTful应用程序来讲,Play框架是理想的选择。它是模块化的,支持异步。Play框架的社区也是全部微服务框架中最大的社区之一。
你能够尝试运行下面的示例代码:
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"; } }
要进一步阅读有关微服务的信息以及教程,请访问如下资源: