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