0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

java微服务架构有哪些

lhl545545 来源:电子发烧友网 2018-02-09 10:34 次阅读

前言

本文首先简单介绍了微服务的概念以及使用微服务所能带来的优势,然后结合实例介绍了几个常见的Java微服务框架。

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

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的最新版本。

LATEST VERSION

<--Then list the dropwizard-core library:-->

io.dropwizard

dropwizard-core

${version}

这将为你设置一个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”;

}

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
收藏 人收藏

    评论

    相关推荐

    SSR与微服务架构的结合应用

    随着互联网技术的快速发展,前端技术栈不断更新迭代,后端架构也经历了从单体应用到微服务的变革。在这个过程中,服务端渲染(SSR)作为一种提升页面加载速度和SEO性能的技术,与微服务
    的头像 发表于 11-18 11:34 228次阅读

    架构与设计 常见微服务分层架构的区别和落地实践

    架构风格越倾向于清晰的职责定位,且让领域模型成为架构的核心。 基于这些架构风格,在软件架构设计过程中又有非常多的架构分层模型。 传统三层
    的头像 发表于 10-22 15:34 149次阅读
    <b class='flag-5'>架构</b>与设计 常见<b class='flag-5'>微服务</b>分层<b class='flag-5'>架构</b>的区别和落地实践

    微服务架构与容器云的关系与区别

    微服务架构与容器云密切相关又有所区别。微服务将大型应用拆分为小型、独立的服务,而容器云基于容器技术,为微服务提供构建、发布和运行的平台。区别
    的头像 发表于 10-21 17:28 171次阅读

    入门级攻略:如何容器化部署微服务

    第一步理解容器化基础,第二步创建Dockerfile,第三步构建推送镜像,第四步部署微服务,第五步管理微服务、第六步优化更新。容器化部署微服务是现代软件开发中的一种高效方法,可提供良好的可移植性、可扩展性和管理性。容器化部署
    的头像 发表于 10-09 10:08 118次阅读

    服务器而言,ARM架构与X86架构什么区别?各自的优势在哪里?

    ,x86 架构服务器在市场占主导,强大处理能力和广泛软件兼容性,广泛用于企业数据中心。ARM 架构服务器近年崛起,凭借低功耗、高效能优势在
    的头像 发表于 09-09 14:05 1435次阅读

    Proxyless的多活流量和微服务治理

    1. 引言 1.1 项目的背景及意义 在当今的微服务架构中,应用程序通常被拆分成多个独立的服务,这些服务通过网络进行通信。这种架构的优势在于
    的头像 发表于 08-28 16:54 1538次阅读
    Proxyless的多活流量和<b class='flag-5'>微服务</b>治理

    NVIDIA NIM微服务带来巨大优势

    服务通过热门 AI 模型为数百万开发者带来高达 5 倍的 token 效率提升,使他们能够立即访问在 NVIDIA DGX Cloud 上运行的 NIM 微服务
    的头像 发表于 08-23 15:20 441次阅读

    采用OpenUSD和NVIDIA NIM微服务创建精准品牌视觉

    全球领先的创意和制作服务机构率先采用 OpenUSD 和 NVIDIA NIM 微服务来创建精准的品牌视觉。
    的头像 发表于 08-01 14:33 390次阅读

    【算能RADXA微服务器试用体验】Radxa Fogwise 1684X Mini 规格

    通过网络可以了解到,算能RADXA微服务器的具体规格: 处理器:BM1684X 算力:高达32Tops INT8峰值算力 内存:16GB LPDDR4X 内存 存储:64GB eMMC 编程框架
    发表于 02-28 11:21

    解析 Sermant 热插拔能力:服务运行时动态挂载 JavaAgent 和插件

    一、概述 Sermant 是基于 Java 字节码增强技术的无代理服务网格,其利用 Java 字节码增强技术,为宿主应用程序提供服务治理功能,以解决大规模
    的头像 发表于 02-18 10:09 902次阅读
    解析 Sermant 热插拔能力:<b class='flag-5'>服务</b>运行时动态挂载 JavaAgent 和插件

    Java微服务随机掉线排查过程简析

    我们的业务共使用 11 台(阿里云)服务器,使用 SpringcloudAlibaba 构建微服务集群, 共计 60 个微服务, 全部注册在同一个 Nacos 集群。
    的头像 发表于 01-13 17:41 901次阅读
    <b class='flag-5'>Java</b><b class='flag-5'>微服务</b>随机掉线排查过程简析

    游戏公司不使用微服务架构的原因

    微服务基本只有 request/response 的模式。做不了 streaming?微服务通常要求应用是无状态的才能做到水平扩展。streaming 本身就是加入了状态
    的头像 发表于 12-29 11:18 408次阅读

    如何搭建微服务架构的全局图景

    如果一直保持共用数据库的模式,则整个架构会越来越僵化,失去了微服务架构的意义。因此小明和小红一鼓作气,把数据库也拆分了。所有持久化层相互隔离,由各个服务自己负责。另外,为了提高系统的实
    的头像 发表于 12-27 15:16 471次阅读
    如何搭建<b class='flag-5'>微服务</b><b class='flag-5'>架构</b>的全局图景

    如何构建弹性、高可用的微服务

    :什么是微服务架构?为什么微服务很重要?RedisEnterprise:微服务的完美方案微服务架构
    的头像 发表于 11-26 08:06 451次阅读
    如何构建弹性、高可用的<b class='flag-5'>微服务</b>?

    设计微服务架构的原则

    微服务是一种软件架构策略,有利于改善整体性能和可扩展性。你可能会想,我的团队需不需要采用微服务,设计微服务架构
    的头像 发表于 11-26 08:05 555次阅读
    设计<b class='flag-5'>微服务</b><b class='flag-5'>架构</b>的原则