Java微服务框架

微服务在开发领域的应用越来越广泛,因为开发人员致力于创建更大、更复杂的应用程序,而这些应用程序作为微小服务的组合能够更好地得以开发和管理。这些微小的服务可以组合在一起工作,并实现更大、应用更广泛的功能。现在出现了很多的工具来满足使用逐段法而不是一次性地设计和构建应用程序的所有需求。今天,我们来看一下什么是微服务、使用微服务的好处,以及几个代码示例。

微服务是什么?

微服务是一种面向服务的架构风格(Java开发人员最重要的技能之一),其中,应用程序被构建为多个不同的小型服务的集合而不是单个应用程序。与单个程序不同的是,微服务让你可以同时运行多个独立的应用程序,而这些独立的应用程序可以使用不同的编码或编程语言来创建。庞大而又复杂的应用程序可以由多个可自行执行的简单而又独立的程序所组成。这些较小的程序组合在一起,可以提供庞大的单程序所具备的所有功能。

微服务捕获了你的业务场景,回答了“你想要试着解决什么问题”这个问题。微服务的开发团队的成员数量比较少,而且可以用任何语言、任何框架进行开发。每个相关的程序都是独立地版本化、执行和扩展。这些微服务可以与其他微服务进行交互,并且具有唯一的URL或名字,同时,即使遇到故障,也能始终保持可用性和一致性。
【加群】:857565362

微服务能带来哪些好处?

使用微服务能带来多个好处,其中有一个好处是,由于这些较小的应用程序无需使用相同的编程语言,因此,开发人员可以使用他们最熟悉的语言。这有助于开发人员用更低的成本和更少的错误来开发程序。灵活性和低成本这两个特点也表现在可以将这些较小的程序重用在其他项目中,从而使其更有效率。

几个Java微服务框架的例子

这里有几个可用于Java开发的微服务框架:

  • Spring Boot:这可能是最好的Java微服务框架了,它适用于控制反转、面向切面编程等等。
  • Jersey:这个开源框架支持Java的JAX-RS API,使用起来非常容易。
  • Swagger:在为你提供开发门户网页的同时,能帮助你生成API文档,以允许用户测试你的API。

你也可以考虑使用其他一些框架,包括:Dropwizard、Ninja Web框架、Play框架、RestExpress、Restlet、Restx和Spark Framework。
【加群】:857565362

如何使用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的最新版本。

<pre style="font-family: Courier New; font-size: 12px; margin-bottom: 0px; margin-left: 22px; margin-right: 0px; margin-top: 0px; overflow-wrap: break-word; white-space: pre-wrap;"><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></pre>

这将为你设置一个Maven项目。在这里,你可以创建配置类、应用程序类、表现类,资源类或一个健康检查,还可以构建Fat JARS,然后运行应用程序。
示例代码:

<pre style="font-family: Courier New; font-size: 12px; margin-bottom: 0px; margin-left: 22px; margin-right: 0px; margin-top: 0px; overflow-wrap: break-word; white-space: pre-wrap;">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;
    }
}</pre>

Spring Boot微服务

Spring Boot让你可以通过嵌入式服务器将它提供的Java应用程序与你自己的应用程序一起使用。它使用了Tomcat,因此你不必使用其他的Java EE容器。你会发现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:适用于移动网络应用。

示例代码:

<pre style="font-family: Courier New; font-size: 12px; margin-bottom: 0px; margin-left: 22px; margin-right: 0px; margin-top: 0px; overflow-wrap: break-word; white-space: pre-wrap;">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);
    }
}</pre>

Jersey

Jersey RESTful框架是开源的,它基于JAX-RS规范。Jersey应用程序可以扩展现有的JAX-RS实现,并通过添加功能和实用工具,使得RESTful服务更为简单,客户端开发变得更加轻松。

Jersey最好的一点是,它的文档很详细,有很多例子。它的速度很快,路由也非常简单。
你可以尝试运行下面的示例代码:

<pre style="font-family: Courier New; font-size: 12px; margin-bottom: 0px; margin-left: 22px; margin-right: 0px; margin-top: 0px; overflow-wrap: break-word; white-space: pre-wrap;">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;
    }
}</pre>

Jersey可以很容易地与其他库一起使用,如Netty或Grizzly,它支持异步连接。它不需要servlet容器。然而,它确实很粗鲁地依赖注入实现。

Play框架

Play框架可以让你很方便地使用Scala和Java来构建、创建和部署Web应用程序。对于需要并行处理远程调用的RESTful应用程序来说,Play框架是理想的选择。它是模块化的,支持异步。Play框架的社区也是所有微服务框架中最大的社区之一。

你可以尝试运行下面的示例代码:

<pre style="font-family: Courier New; font-size: 12px; margin-bottom: 0px; margin-left: 22px; margin-right: 0px; margin-top: 0px; overflow-wrap: break-word; white-space: pre-wrap;">package controllers; import play.mvc.*; public class Application extends Controller { public static void index() {
        render();
    } public static void sayHello(String myName) {
        render(myName);
    }
}</pre>

Restlet

Restlet可以帮助开发人员创建遵循RESTful架构模式的快速而又可扩展的Web API。它具有不错的路由和过滤功能,可用于Java SE/EE、OSGi、Google AppEngine(Google Compute的一部分)、Android和其他主要的平台。

由于它的社区是封闭的,因此Restlet的学习曲线比较陡峭,但是你可以从StackOverflow上获得帮助。

示例代码:

<pre style="font-family: Courier New; font-size: 12px; margin-bottom: 0px; margin-left: 22px; margin-right: 0px; margin-top: 0px; overflow-wrap: break-word; white-space: pre-wrap;">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";
    }
}</pre>

我这儿整理了比较全面的JAVA相关的面试资料,
需要领取面试资料的同学,请加群:473984645



获取更多学习资料,可以加群:473984645或扫描下方二维码


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容