微服務越來越多地用于開發領域,因為開發人員緻力于建立更大,更複雜的應用程式,這些應用程式作為較小的服務組合而更好地開發和管理,可将工作在一起,實作更大的應用程式範圍的功能。工具正在上升,以滿足使用逐塊方法思考和建構應用程式的需求,與同時考慮整個應用程式相比。下面為大家講述一下Java五大微伺服器,使用這些功能的好處以及相關的代碼示例。
<a href="http://s1.51cto.com/oss/201710/24/35ce62a8a52dab70f7bfd22bf429e86f.jpg-wh_651x-s_300461122.jpg" target="_blank"></a>
什麼是微服務
微服務是一種面向服務的架構風格(Java開發人員最重要的技能之一),其中應用程式被建構為不同的小型服務而不是整個應用程式的集合。您可以使用多個獨立的應用程式來獨立運作,并且可以使用不同的編碼或程式設計語言來建立。大而複雜的應用程式可以由可自行執行的更簡單和獨立的程式組成。這些較小的程式組合在一起,以提供大型單片應用程式的所有功能。
微服務捕獲使用者的業務場景,它通常由隻有少數成員的工程團隊開發,可以用任何程式設計語言編寫并且可以使用任何架構。每個涉及的程式都是獨立版本化,執行和縮放。這些微伺服器可以與其他微伺服器互動,并且可以具有唯一的URL或名稱,同時即使遇到故障時始終可用和一緻。
微服務的好處是什麼?
使用微服務使得較小的應用程式不依賴于相同的編碼語言,開發人員可以使用他們最熟悉的程式設計語言。這有助于開發人員以更低的成本和更少的錯誤更快地提出一個程式。靈活性和低成本也可以來自于将這些較小的程式重用于其他項目,進而使其更有效率。
Java的微服務架構示例
可用于開發Java的微服務架構,其中包括如下:
Spring Boot:這可能是最好的Java微服務架構,它可以用于反轉控制,面向對象程式設計等語言。
Jersey :開源架構支援Java中的JAX-RS API非常容易使用。
Swagger:幫助使用者記錄API,并為使用者提供開發門戶,允許使用者測試API。
使用者還可以考慮的其他内容包括:Dropwizard,Ninja Web Framework,Play Framework,RestExpress,Restlet,Restx和Spark Framework。
如何使用Microservices With Spring Boot建立
Spring Boot使使用者可以通過嵌入式伺服器将Java應用程式與自己的應用程式一起使用。不必再使用其他Java EE容器。
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 Boot架構,參考示例代碼:
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最好的一點是它有很好的文檔,完善的案例。性能方面快捷并且路由簡單,參考示例代碼:
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,然後運作應用程式。
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;
private String defaultName = "Stranger";
public String getTemplate() {
return template;
public String getDefaultName() {
return defaultName;
本文作者:佚名
來源:51CTO