3年前 (2021-10-12)  微服务 |   抢沙发  578 
文章评分 0 次,平均分 0.0

微服务代码示例、最佳实践、教程

随着开发人员致力于创建更大、更复杂的应用程序,微服务在开发领域得到了越来越多的使用,这些应用程序作为小型服务的组合得到了更好的开发和管理,这些服务协同工作,实现了更广泛、更广泛的应用程序功能。

诸如Service Fabric之类的工具正在兴起,以满足使用逐件方法来思考和构建应用程序的需要。坦率地说,与同时考虑整个应用程序相比,这种方法不那么令人费解。

今天,我们将了解微服务、使用此功能的好处以及一些代码示例。

什么是微服务

微服务是一种体系结构风格,它将单个应用程序开发为一组小型服务。每个服务都在自己的进程中运行。这些服务使用轻量级协议(通常通过消息传递或HTTP)与客户机通信,并且通常彼此通信。

微服务可以被认为是一种面向服务的体系结构(Java开发人员最关键的技能之一),其中应用程序构建为不同的小型服务的集合,而不是一个完整的应用程序。

你有几个独立的应用程序可以独立运行,而不是一个单一的应用程序。您可以使用不同的编程语言甚至不同的平台创建它们。您可以使用自己执行的更简单、独立的程序来构造大型复杂的应用程序。这些较小的程序被分组以提供大型单片应用程序的所有功能。

Microservices捕捉到您的业务场景,回答了“您想解决什么问题?”

与大型团队处理大型、单一项目不同,更小、更敏捷的团队使用他们最熟悉的工具和框架开发服务。每个涉及的程序都有独立的版本、执行和扩展。这些微服务可以与其他微服务交互,并且可以具有唯一的URL或名称,同时即使遇到故障也始终可用并保持一致。

微服务的好处是什么?

使用微服务有很多好处。其中一些与它们如何允许开发人员编写代码有关。其他因素会影响您的架构。

微服务是开发团队独立创建的小型应用程序。由于它们通过消息传递进行通信(如果有的话),因此它们不依赖于相同的编码语言。开发人员可以使用他们最熟悉的编程语言。这有助于他们更快地工作,降低成本,减少bug

由于您的团队正在处理更小的应用程序和更专注的问题领域,因此他们的项目也趋向于更敏捷。他们可以更快地迭代,在更短的时间内处理新特性,并且几乎可以立即修复bug。他们也经常发现更多的重用代码的机会。

微服务也提高了体系结构的可伸缩性。

对于单片系统,您通常会以“投入更多硬件”来解决问题,或以购买成本和难以维护企业软件为代价。使用微服务,您可以使用负载平衡器和消息传递等标准解决方案进行水平扩展。

此外,随着越来越多的企业拥抱云,您可能也在这样看。微服务是实现这一目标的好方法。

微服务代码示例、最佳实践、教程

云平台有助于采用集装箱化等新技术。微服务也适合于容器化,因为它们已经是具有有限依赖集的小型应用程序。这意味着您可以使用Docker和Kubernetes等技术水平扩展服务,而无需编写任何定制代码。

Java微服务框架示例

有几种微服务框架可用于Java开发。其中一些是:

  • Spring Boot 这可能是在控制反转、面向方面编程等语言之上工作的最好的Java微服务框架。
  • Jersey 这个开源框架支持Java中的JAX-RSAPI,非常易于使用。
  • Swagger 帮助您记录API,并为您提供一个开发门户,允许用户测试您的API。

您可以考虑的其他内容包括:DooWrar、Nuja Web框架、Play框架、REST Exchange、RestRead、RESX和SCAP框架。

如何使用Dropwizard创建

DropWizard将成熟和稳定的Java库整合在轻量级软件包中,您可以将其用于应用程序。它使用Jetty表示HTTP,Jersey表示REST,Jackson表示JSON,以及Metrics、Guava、Logback、Hibernate Validator、ApacheHttpClient、Liquibase、Mustache、Joda Time和Freemarker。

您可以使用Maven设置Dropwizard应用程序。怎样

在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>

这将为您设置一个Maven项目。从这里,您可以创建配置类、应用程序类、表示类、资源类或运行状况检查,还可以构建胖jar,然后运行应用程序。

请在此链接查看Dropwizard用户手册(https://www.dropwizard.io/1.1.0/docs/manual/index.html)。Github库就在这里(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创建的微服务

SpringBoot为您提供了Java应用程序,可通过嵌入式服务器与您自己的应用程序一起使用。它使用Tomcat,因此您不必使用JavaEE容器。此链接提供了一个示例Spring Boot教程。

您可以在这里找到所有springboot项目,您将认识到springboot拥有应用程序所需的所有基础设施。

不管你是为安全、配置还是大数据编写应用程序;它有一个Spring Boot项目。

Spring Boot项目包括:

  • IO平台:版本化应用程序的企业级分发。
  • 框架:用于事务管理、依赖项注入、数据访问、消息传递和web应用程序。
  • 云:用于分布式系统,用于构建或部署微服务。
  • 数据:对于与数据访问相关的微服务,可以是map reduce、关系型或非关系型。
  • 批处理:用于高级别的批处理操作。
  • 安全性:用于授权和身份验证支持。
  • 对于RESTful服务:文档。
  • 社交:用于连接社交媒体API。
  • 移动:用于移动Web应用程序。

示例代码:

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也很快,路线也非常简单。

关于如何开始使用Jersey的文档位于此链接(https://eclipse-ee4j.github.io/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;

}

}

Jersey非常容易与其他库(如Netty或Grizzly)一起使用,并且它支持异步连接。它不需要servlet容器。但是,它确实有一个未完成的依赖注入实现。

Play Framework

Play Framework为您提供了使用Scala和Java构建、创建和部署Web应用程序的更简单方法。此框架非常适合需要并行处理远程调用的RESTful应用程序。它也是非常模块化的,支持异步。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。该框架具有良好的路由和过滤功能。它可用于JavaSE/EE、OSGi、Google的AppEngine(它是Google Compute的一部分)、Android和许多其他Java平台。它是一个自给自足的框架,甚至附带有自己的Web服务器。

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";

}

}

微服务的最佳实践

到现在为止,您应该已经知道,向微服务的转变为开发、运营和业务带来了很多好处。它们为提高可扩展性、更高的可靠性和成本节约创造了机会。但是,没有免费的午餐。微服务本身也有缺陷。

以下是一些有助于迁移的最佳实践。

您的每个微服务都应该使用自己的数据存储。您希望开发(和开发操作)团队为他们的每个服务选择数据库。他们应该有机会选择最适合其项目的数据存储。同时,如果团队共享一个数据库,那么他们很容易共享一个模式,用不同的名称创建一个单一的服务。

在容器中部署微服务不仅仅是一个好主意。这也是一种最佳实践。我已经多次提到,微服务团队应该选择自己的工具。运营部和开发部如何管理由此造成的混乱?通过使用容器,您可以使用一组工具部署和编排系统。

RESTful服务和微服务经常相互关联是有原因的。这是因为最好的微服务体系结构将其服务视为无状态的。REST的状态转移将状态下推到客户端,这意味着您可以将服务器视为无状态,并将代码作为整体的可互换部分运行。您只需担心是否有足够的可用服务来处理负载。而且,如果一个失败了,另一个可以弥补不足。

在本文中,我们讨论了什么是微服务,以及它们如何帮助您改进企业体系结构。在定义了这些服务之后,我们介绍了它们的主要优点。然后我们看了一些最流行的Java微服务API。

原文地址:https://stackify.com/what-are-microservices/

 

除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/2432.html

关于

发表评论

表情 格式

暂无评论

登录

忘记密码 ?

切换登录

注册