轉載地址: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"; } }
要進一步閱讀有關微服務的信息以及教程,請訪問如下資源: