來源素文宅博客:http://blog.yoodb.com/yoodb/article/detail/1339
微服務愈來愈多地用於開發領域,由於開發人員致力於建立更大,更復雜的應用程序,這些應用程序做爲較小的服務組合而更好地開發和管理,可將工做在一塊兒,實現更大的應用程序範圍的功能。工具正在上升,以知足使用逐塊方法思考和構建應用程序的需求,與同時考慮整個應用程序相比。下面本站素文宅博客爲你們講述一下Java五大微服務器,使用這些功能的好處以及相關的代碼示例。html
什麼是微服務
微服務是一種面向服務的架構風格(Java開發人員最重要的技能之一),如小編我的網站素文宅博客http://blog.yoodb.com,其中應用程序被構建爲不一樣的小型服務而不是整個應用程序的集合。您可使用多個獨立的應用程序來獨立運行,而且可使用不一樣的編碼或編程語言來建立。大而複雜的應用程序能夠由可自行執行的更簡單和獨立的程序組成。這些較小的程序組合在一塊兒,以提供大型單片應用程序的全部功能。java
微服務捕獲用戶的業務場景,它一般由只有少數成員的工程團隊開發,能夠用任何編程語言編寫而且可使用任何框架。每一個涉及的程序都是獨立版本化,執行和縮放。這些微服務器能夠與其餘微服務器交互,而且能夠具備惟一的URL或名稱,同時即便遇到故障時始終可用和一致。android
微服務的好處是什麼?
使用微服務使得較小的應用程序不依賴於相同的編碼語言,開發人員可使用他們最熟悉的編程語言。這有助於開發人員以更低的成本和更少的錯誤更快地提出一個程序。靈活性和低成本也能夠來自於將這些較小的程序重用於其餘項目,從而使其更有效率。git
Java的微服務框架示例
可用於開發Java的微服務框架,其中包括以下:
spring Boot:這多是最好的Java微服務框架,它能夠用於反轉控制,面向對象編程等語言。
Jersey :開源框架支持Java中的JAX-RS API很是容易使用。
Swagger:幫助用戶記錄API,併爲用戶提供開發門戶,容許用戶測試API。
用戶還能夠考慮的其餘內容包括:Dropwizard,Ninja Web Framework,Play Framework,RestExpress,Restlet,Restx和SparkFramework。github
如何使用Microservices With Spring Boot建立
Spring Boot使用戶能夠經過嵌入式服務器將Java應用程序與本身的應用程序一塊兒使用。沒必要再使用其餘Java EE容器。web
Spring Boot項目包括:
1) Spring IO平臺:版本化應用程序的企業級分發
2) Spring框架:用於事務管理,依賴注入,數據訪問,消息傳遞和Web應用程序
3) Spring Cloud:用於分佈式系統,用於構建或部署您的微服務器
4) Spring數據:對於與數據訪問相關的微服務,不管是映射減小,關係仍是非關係
5) Spring Batch:用於批處理做業等操做
6) Spring Security:用於受權和身份驗證支持
7) Spring REST文檔:用於記錄RESTful服務
8) Spring Social:用於鏈接社交媒體API
9) Spring Mobile:適用於移動網絡應用spring
快速搭建Spring Boot框架,詳細參考資料http://blog.yoodb.com/yoodb/article/detail/297,參考示例代碼:編程
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
Jersey RESTful框架是開源的,它基於JAX-RS規範。Jersey應用程序能夠擴展示有的JAX-RS實現並添加功能和實用程序,使RESTful服務更簡單,並使客戶端開發變得更加輕鬆。服務器
Jersey最好的一點是它有很好的文檔,完善的案例。性能方面快捷而且路由簡單,關於如何入門Jersey文檔是參考資料:https://stackify.com/soap-vs-rest/,而文檔資料詳情見http://www.oracle.com/splash/java.net/maintenance/index.html。參考示例代碼:網絡
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 很是容易與其餘libraries一塊兒使用,如Netty或Grizzly,支持異步鏈接不須要servlet容器,然而它有一個不依賴注入的實現。
Play Framework
Play Framework爲用戶提供了使用Scala和Java構建,建立和部署Web應用程序的更加簡單的方法。Play Framework是RESTful應用程序的理想選擇,須要您並行處理遠程調用。它也很是模塊化,支持異步。Play Framework也是全部微服務框架中最大的社區之一。
參考示例代碼:
package controllers; import play.mvc.*; public class Application extends Controller { public static void index() { render(); } public static void sayHello(String myName) { render(myName); } }
Restlet
Restlet幫助開發人員建立遵循RESTful架構模式的快速和可擴展的Web API。它具備良好的路由和過濾功能,可用於java SE/EE,OSGi,Google AppEngine(Google Compute部分),Android和其餘主要平臺。
參考示例代碼:
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"; } }
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.xml文件中,使用最新版本的DropWizard添加一個dropwizard.version屬性
<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地址:https://github.com/dropwizard/dropwizard,參考示例代碼:
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; } }