Java微服務:代碼示例、教程
隨著開發人員致力于創建更大、更復雜的應用程序,微服務在開發領域得到了越來越多的使用,這些應用程序作為小型服務的組合得到了更好的開發和管理,這些服務協同工作以實現更大、應用程序范圍的功能。工具正在興起,以滿足使用逐件方法來思考和構建應用程序的需要。坦白說,與同時考慮整個應用程序相比,這種方法更令人難以置信。今天,我們將了解微服務、使用此功能的好處以及一些代碼示例。
什么是微服務?
微服務是一種面向服務的體系結構風格(Java開發人員最重要的技能之一),其中應用程序構建為不同小型服務的集合,而不是一個完整的應用程序。你有幾個獨立的應用程序,它們可以獨立運行,可以使用不同的編碼或編程語言創建,而不是單一的應用程序。大型和復雜的應用程序可以由簡單和獨立的程序組成,這些程序可以自己執行。這些較小的程序組合在一起,提供大型單片應用程序的所有功能。
Microservices捕獲您的業務場景,回答“您試圖解決什么問題?”的問題。它通常由只有少數成員的工程團隊開發,可以用任何編程語言編寫,也可以使用任何框架。每個涉及的程序都有獨立的版本、執行和擴展。這些微服務可以與其他微服務交互,并且可以具有唯一的URL或名稱,同時即使遇到故障也始終可用并保持一致。
微服務的好處是什么?
使用微服務有幾個好處。首先,因為這些較小的應用程序不依賴于相同的編碼語言,所以開發人員可以使用他們最熟悉的編程語言。這有助于開發人員以更低的成本和更少的bug更快地開發出一個程序。敏捷性和低成本還可以來自于能夠在其他項目上重用這些較小的程序,從而提高效率。
Java微服務框架示例
有幾種微服務框架可用于Java開發。其中一些是:
- Spring Boot:這可能是最好的Java微服務框架,它可以在控制反轉、面向方面編程等語言之上工作。
- Jersey:這個開源框架支持Java中的JAX-RSAPI,非常易于使用。
- Swagger:幫助您記錄API,并為您提供一個開發門戶,允許用戶測試您的API。
您可以考慮的其他內容包括:DooWrar、Nuja Web框架、Play框架、REST Exchange、RestRead、RESX和SCAP框架。
如何使用DropWizard創建
DropWizard將成熟和穩定的Java庫整合到輕量級軟件包中,您可以將其用于自己的應用程序。它使用Jetty表示HTTP,Jersey表示REST,Jackson表示JSON,以及Metrics、Guava、Logback、Hibernate Validator、ApacheHttpClient、Liquibase、Mustache、Joda Time和Freemarker。
您可以使用Maven設置Dropwizard應用程序。怎樣
在POM中,使用最新版本的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項目。從這里,您可以創建配置類、應用程序類、表示類、資源類或運行狀況檢查,還可以構建胖jar,然后運行應用程序。
請在此鏈接查看Dropwizard用戶手冊( http://www.dropwizard.io/1.1.0/docs/manual/index.html )。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;
- }
- }
帶Spring Boot的微服務
SpringBoot為您提供了Java應用程序,可通過嵌入式服務器與您自己的應用程序一起使用。它使用Tomcat,因此您不必使用JavaEE容器。
您可以在這里找到所有springboot項目,您將認識到springboot擁有應用程序所需的所有基礎設施。不管你是為安全、配置還是大數據編寫應用程序;它有一個Spring Boot項目。
Spring Boot項目包括:
- Spring IO平臺:版本化應用程序的企業級分發。
- Spring框架:用于事務管理、依賴項注入、數據訪問、消息傳遞和web應用程序。
- SpringCloud:用于分布式系統,用于構建或部署微服務。
- Spring數據:對于與數據訪問相關的微服務,可以是map reduce、關系型或非關系型。
- Spring批處理:用于高級別的批處理操作。
- Spring安全性:用于授權和身份驗證支持。
- SpringREST文檔:用于記錄RESTful服務。
- SpringSocial:用于連接社交媒體API。
- Spring Mobile:用于移動Web應用程序。
示例代碼:
- 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://eclipse-ee4j.github.io/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;
- }
- }
- 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 Framework為您提供了使用Scala和Java構建、創建和部署Web應用程序的更簡單方法。Play框架非常適合需要并行處理遠程調用的RESTful應用程序。它也是非常模塊化的,支持異步。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
Restlet幫助開發人員創建符合RESTful架構模式的快速、可伸縮的Web api。它具有良好的路由和過濾功能,可用于JavaSE/EE、OSGi、Google AppEngine(Google Compute的一部分)、Android和其他主要平臺。
Restlet有一個陡峭的學習曲線,封閉的社區會使學習曲線變得更糟。
示例代碼:
- 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";
- }
- }