Java微服务框架一览
原文:Java Microservices: Code Examples, Tutorials, and More
作者:Angela Stringfellow
翻译:雁惊寒
译者注:本文首先简单介绍了微服务的概念以及使用微服务所能带来的优势,然后结合实例介绍了几个常见的Java微服务框架。以下是译文。
微服务在开发领域的应用越来越广泛,因为开发人员致力于创建更大、更复杂的应用程序,而这些应用程序作为微小服务的组合能够更好地得以开发和管理。这些微小的服务可以组合在一起工作,并实现更大、应用更广泛的功能。现在出现了很多的工具来满足使用逐段法而不是一次性地设计和构建应用程序的所有需求。今天,我们来看一下什么是微服务、使用微服务的好处,以及几个代码示例。
微服务是什么?
微服务是一种面向服务的架构风格(Java开发人员最重要的技能之一),其中,应用程序被构建为多个不同的小型服务的集合而不是单个应用程序。与单个程序不同的是,微服务让你可以同时运行多个独立的应用程序,而这些独立的应用程序可以使用不同的编码或编程语言来创建。庞大而又复杂的应用程序可以由多个可自行执行的简单而又独立的程序所组成。这些较小的程序组合在一起,可以提供庞大的单程序所具备的所有功能。
微服务捕获了你的业务场景,回答了“你想要试着解决什么问题”这个问题。微服务的开发团队的成员数量比较少,而且可以用任何语言、任何框架进行开发。每个相关的程序都是独立地版本化、执行和扩展。这些微服务可以与其他微服务进行交互,并且具有唯一的URL或名字,同时,即使遇到故障,也能始终保持可用性和一致性。
微服务能带来哪些好处?
使用微服务能带来多个好处,其中有一个好处是,由于这些较小的应用程序无需使用相同的编程语言,因此,开发人员可以使用他们最熟悉的语言。这有助于开发人员用更低的成本和更少的错误来开发程序。灵活性和低成本这两个特点也表现在可以将这些较小的程序重用在其他项目中,从而使其更有效率。
几个Java微服务框架的例子
这里有几个可用于Java开发的微服务框架:
- Spring Boot:这可能是最好的Java微服务框架了,它适用于控制反转、面向切面编程等等。
- Jersey:这个开源框架支持Java的JAX-RS API,使用起来非常容易。
- Swagger:在为你提供开发门户网页的同时,能帮助你生成API文档,以允许用户测试你的API。
你也可以考虑使用其他一些框架,包括:Dropwizard、Ninja Web框架、Play框架、RestExpress、Restlet、Restx和Spark Framework。
如何使用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文件中,添加一个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@JsonPropertyprivate String template;@NotEmpty@JsonPropertyprivate String defaultName = "Stranger";public String getTemplate() {return template;}public String getDefaultName() {return defaultName;}
}
Spring Boot微服务
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
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框架
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
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 {@Getpublic String represent() {return "hello, world";}
}
有关微服务更多的资源和教程
要进一步阅读有关微服务的信息以及教程,请访问以下资源:
- An Introduction to Microservices, Part 1
- Build an API for microservices in 5 minutes
- Microservices Tutorials
- Microservice Architecture – A Quick Guide
- Introduction to Microservices
Java微服务框架一览相关推荐
- 【插件发布】JAVA微服务框架,Jeecg-P3-Biz-OA 1.0.0 插件开源发布
JAVA微服务框架,Jeecg-P3-Biz-OA 1.0.0 插件开源发布 OA办公插件,采用JEECG-P3微服务框架技术,实现OA办公基本功能,H5页面素材:相册管理.联系人.联系人详细.报表. ...
- 【插件发布】JAVA微服务框架,Jeecg-P3-Base-System 1.0.0 插件开源发布
JAVA微服务框架,Jeecg-P3-Base-System 1.0.0 插件开源发布 系统管理插件,采用JEECG-P3微服务框架技术,实现了P3插件平台支撑的基础功能:用户管理,角色管理.菜单管理 ...
- 【插件发布】JAVA微服务框架,Jeecg-P3-Demo 1.0.0 插件开源发布
JAVA微服务框架,Jeecg-P3-Demo 1.0.0 插件开源发布 Jeecg-P3-Demo项目,采用JEECG-P3微服务框架技术,做了几个常见Demo功能案例:普通列表.树列表.一对多列表 ...
- 主流Java微服务框架有哪些?-开课吧
本文我们简单聊聊当下主流的3个Java微服务框架,看看各自的特点. 1.Spring and SpringBoot SpringBoot在Java微服务领域绝对是一哥,毫无争议,据说已经占据57%的市 ...
- Java 微服务框架选型
Java 微服务框架选型(Dubbo 和 Spring Cloud?) 微服务(Microservices)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独立部署, ...
- java微服务框架有哪些_java中有哪些常见微服务框架
常见微服务框架介绍: Spring Boot:这可能是最好的Java微服务框架了,它适用于控制反转.面向切面编程等等. 示例代码:import org.springframework.boot.*; ...
- 3 个主流 Java 微服务框架
本文我们简单聊聊当下主流的 3 个 Java 微服务框架,看看各自的特点. 1. Spring and Spring Boot Spring Boot 在 Java 微服务领域绝对是一哥,毫无争议,据 ...
- Oracle发布开源的轻量级 Java 微服务框架 Helidon
近日,Oracle推出了一个新的开源框架Helidon,该项目是一个用于创建基于微服务的应用程序的Java库集合.和Payara Micro.Thorntail(之前的WildFly Swarm).O ...
- Oracle发布开源的轻量级 Java 微服务框架 Helidon 1
近日,Oracle推出了一个新的开源框架Helidon,该项目是一个用于创建基于微服务的应用程序的Java库集合.和Payara Micro.Thorntail(之前的WildFly Swarm).O ...
最新文章
- 机器学习——大数据与MapReduce
- 在Python中连接字符串的首选方法是什么?
- python爬虫新手项目-给新手推荐几个实用又适合上手的Python爬虫项目
- 疫情之下信贷行业后续的前景
- python递归面试题_汉诺塔问题其实很简单 Python 递归经典面试题
- 29.课时29.【Django模板】url标签使用详解(Av61533158,P29)
- 简单的js网页计算机代码,简易js代码实现计算器操作
- loader与plugin,module与chunk,compiler与compilation
- c语言全缓冲,C语言缓冲区 - osc_8b4n157m的个人空间 - OSCHINA - 中文开源技术交流社区...
- PHP使用redis防止大并发下二次写入
- 网络摄像头ip php,C#实现IP摄像头的方法
- java百度地图离线LBS_百度地图之离线下载功能
- html video函数,HTML5 Video 的API函数
- STM32F030 电压监测实现
- Signature Pad 使用
- 从模板部署虚拟机和自定义虚拟机规范
- 斑马打印机 android驱动,斑马ZC300驱动-斑马Zebra ZC300打印机驱动下载 v01.03.00官方版 - 51驱动网...
- 斐讯dns劫持,路由器DNS被劫持的解决办法
- 一年之计在于春,一日之计在于晨, 一生之计在于勤,清晨起来修手机
- Word如何从中间页插入页码
热门文章
- c语言 python java css,从零起步学编程 Python篇 Java篇 C#篇 CSS篇 全4册
- 计算机系统论文摘要,计算机系统结构论文摘要怎么写 计算机系统结构论文摘要范文参考...
- 安全需求规范和管理指南
- Python优秀函数库集锦(二)
- 【docker】镜像
- 软件测试常见笔试题(附带答案)—初级篇01
- 2018-2019年世界经济危机是中国崛起最大的机遇!
- 数学建模常用算法汇总及python,MATLAB实现(五) —— 拟合
- WDF开发USB设备驱动教程(1)
- 万能数据库查询分析器使用技巧之(十六)