引言:本文首先简单介绍了微服务的概念以及使用微服务所能带来的优势,然后结合实例介绍了几个常见的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
@JsonProperty
private String template;
@NotEmpty
@JsonProperty
private 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 {
@Get
public String represent() {
return "hello, world";
}
}

Java微服务框架一览的更多相关文章

  1. Java微服务框架

    Java的微服务框架dobbo.spring boot.redkale.spring cloud 消息中间件RabbitMQ.Kafka.RocketMQ

  2. 现如今,最热门的13个Java微服务框架

    曾经的 服务器领域 有许多不同的芯片架构???有哪些芯片架构???和操作系统???,经过长期发展,Java的“一次编译,到处运行”使得它在服务器领域找到一席之地,成为程序员们的最爱. 本文,我们将和大 ...

  3. Java 微服务框架 Redkale 入门介绍

    Redkale 功能 Redkale虽然只有1.xM大小,但是麻雀虽小五脏俱全.既可作为服务器使用,也可当工具包使用.作为独立的工具包提供以下功能:1.convert包提供JSON的序列化和反序列化功 ...

  4. 最热门的 10 个 Java 微服务框架

    1.Spring Boot Java 构建 Spring 应用程序已经有很长一段时间了,Spring Boot 是 Spring 的一个特定版本,它通过对配置细节的处理,使微服务构建更加简便.创建 S ...

  5. Java 微服务框架选型(Dubbo 和 Spring Cloud?)

    微服务(Microservices)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独立部署,各个微服务之间是松耦合的.每个微服务仅关注于完成一件任务并很好地完成该任 ...

  6. [转]Java微服务框架选型(Dubbo 和 Spring Cloud?)

    转载于 http://www.cnblogs.com/xishuai/p/dubbo-and-spring-cloud.html 微服务(Microservices)是一种架构风格,一个大型复杂软件应 ...

  7. Java 微服务框架选型 Dubbo 和 Spring Cloud

    微服务(Microservices)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独立部署,各个微服务之间是松耦合的.每个微服务仅关注于完成一件任务并很好地完成该任 ...

  8. Taurus.MVC 微服务框架 入门开发教程:项目集成:3、客户端:其它编程语言项目集成:Java集成应用中心。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  9. 基于thrift的微服务框架

    前一阵开源过一个基于spring-boot的rest微服务框架,今天再来一篇基于thrift的微服务加框,thrift是啥就不多了,大家自行百度或参考我之前介绍thrift的文章, thrift不仅支 ...

随机推荐

  1. easyui---easyloader.js

    1.easyloader.js 是根据用户指定,动态加载组件,可以替换下面jqueryeasyui <!-- <script type="text/javascript" ...

  2. bin/hdfs dfs命令存在WARN util.NativeCodeLoader问题消除方法

    例如:[hadoop@db01 hadoop-2.5.0]$ bin/hdfs dfs -ls17/03/01 21:50:33 WARN util.NativeCodeLoader: Unable ...

  3. Autoloading Classes

    php.net Many developers writing object-oriented applications create one PHP source file per class de ...

  4. 学习计划 mysql 用户管理与权限

    最近在学习数据库的 主从复制 里面涉及到了关于用户及其管理权限的赋予,之前一直没有认真的学习这个. 现在想具体的学习一下. -- 为什么 数据库 要实现多用户管理? 举个最简单的例子,你需要和第三方做 ...

  5. javaScript高级教程(三) javaScript不支持关联数组,只是语法上像关联数组

    1.在js中所有要素都是继承自Object对象的,任何对象都能通过obj['name'] = something的形式来添加属性,相当于obj.name=something. 之所以设计中括号这种存取 ...

  6. HTML5(字符标准,表单)

    字符标准 <meta charset="utf-8"> 表单 1.HTML 表单用于搜集不同类型的用户输入. 实例——创建文本字段 <form action=&q ...

  7. zkSNARK 零知识验证

    参考文献 ZCash7篇,有社区翻译版,但还是推荐看原汁原味的     https://z.cash/blog/snark-explain.html Vitalik3篇,小天才作者我就不介绍了,这三篇 ...

  8. nginx 11个处理阶段 && nginx lua 8个处理阶段

    1. nginx 11 个处理阶段 nginx实际把请求处理流程划分为了11个阶段,这样划分的原因是将请求的执行逻辑细分,各阶段按照处理时机定义了清晰的执行语义,开发者可以很容易分辨自己需要开发的模块 ...

  9. 重读《Java编程思想》

    相关最新代码已上传至我的GitHub了(https://github.com/WenyangSun/ThinkingInJava),后续例子没有在博客上更新. 1.在类的内部,变量定义的先后顺序决定了 ...

  10. oracle实例内存(SGA和PGA)调整

    修改oracle内存占用 >show parameter sga; (查看内存占用情况) NAME                                   TYPE          ...