使用Spring Cloud Netflix的Kotlin微服务:第1部分

让我们用Kotlin开始一个Spring Cloud项目。

云原生应用程序

云原生是一种应用程序开发风格,旨在利用云计算框架,云框架由松散耦合的云服务组成。这意味着我们必须将任务分解为可以在不同位置的多个服务器上运行的单独服务。必须考虑冗余计划云原生应用程序,以便应用程序能够承受设备故障,并能够在硬件发生故障时自动重新映射IP地址。

在本教程中,我们将演示Spring Cloud Netflix和Kotlin的示例。Spring Cloud非常适合用Java构建微服务,现在我们将向Kotlin展示这个概念。Kotlin是一种用于构建后端系统的非常强大的语言,并且为产品目的采用它的组织数量正在增加。

Spring Cloud Netflix

Spring Cloud Netflix是一个针对云原生微服务的Spring项目,它通过自动配置和绑定到Spring环境为Spring Boot应用程序提供Netflix OSS集成。它提供了类似的模式:

  • 配置服务器(配置服务器),
  • 服务发现(Eureka),
  • 断路器(Hystrix),
  • 智能路由/网关(Zuul)
  • 客户端负载平衡(功能区)。

其中大部分将在下面进行分析。

配置服务器

Config Server是一个集中且直接的解决方案,用于配置和检索所有微服务的配置。它提供了一种集中式方法来规划跨多个分布式服务和组件的所有配置。通常,配置文件(例如.yml文件)存在于Git存储库中,配置服务器检索所有服务的配置。

让我们从配置服务器创建开始。出于简单的原因,我们不会有用于配置的Git存储库; 我们将配置保存在服务器.yml文件中。您需要开始的是使用Kotlin和Maven创建一个Spring Boot项目(Gradle也可以),这些依赖项:

<dependencies>  
  <dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-config-server</artifactId>  
  </dependency>  
  <dependency>  
    <groupId>org.jetbrains.kotlin</groupId>  
    <artifactId>kotlin-stdlib-jre8</artifactId>  
  </dependency>  
  <dependency>  
    <groupId>org.jetbrains.kotlin</groupId>  
    <artifactId>kotlin-reflect</artifactId>  
  </dependency>  
  
  <dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-test</artifactId>  
    <scope>test</scope>  
  </dependency>  
</dependencies>

在ConfigServerApplication类中添加@EnableConfigServer。

@SpringBootApplication  
@EnableConfigServer  
class ConfigServerApplication  
  
fun main(args: Array<String>) {  
  runApplication<ConfigServerApplication>(*args)  
} 

我们可以通过编辑application.yml将配置服务器配置到资源中的文件夹。正如我们所说,我们将仅使用本机文件系统来激活本机配置文件,因此我们在类路径中使用/ config位置。

Server:  
  port: 8888  
spring:  
  profiles:  
    active: native  
  cloud:  
    config:  
      server:  
        native:  
          search-locations: classpath:config/

最后,我们运行Spring Boot应用程序,然后在端口8888上启动并运行配置服务器。下一步是设置发现服务器。

Eureka

Eureka是Netflix OSS堆栈的发现服务。它是一种基于REST的服务,主要用于定位服务。Eureka附带Eureka客户端,可与服务进行交互。客户端具有嵌入式负载均衡器,可执行基本的循环负载平衡。Eureka在AWS中运行良好的原因是,在云环境中,存在连续的服务器传输,因此与使用具有已知IP地址和主机名的服务器的传统负载平衡器不同,需要检测没有此信息的服务器。Eureka会根据服务名称检测和负载均衡服务。还有负载均衡器可根据流量,资源使用等多种因素提供加权负载均衡。

每个地区都有一些地区和一个Eureka群集。群集中的Eureka服务器仅了解其区域中的实例。服务在Eureka注册,然后发送心跳以续订租约。如果客户端服务没有续订租约几次,则将其从服务器注册表中取出。来自任何区域的客户端都可以查找注册表信息以查找其服务并进行远程调用。要设置Eureka,我们需要创建另一个Spring Boot项目,就像我们为具有这些依赖项的配置服务器所做的那样:

<dependencies>  
    <dependency>  
      <groupId>org.springframework.cloud</groupId>  
      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>  
    </dependency>  
    <dependency>  
      <groupId>org.jetbrains.kotlin</groupId>  
      <artifactId>kotlin-stdlib-jre8</artifactId>  
    </dependency>  
    <dependency>  
      <groupId>org.jetbrains.kotlin</groupId>  
      <artifactId>kotlin-reflect</artifactId>  
    </dependency>  
  
    <dependency>  
      <groupId>org.springframework.boot</groupId>  
      <artifactId>spring-boot-starter-test</artifactId>  
      <scope>test</scope>  
    </dependency>  
  </dependencies>

我们在DiscoverServerApplication类中添加了@EnableEurekaServer。

@SpringBootApplication  
@EnableEurekaServer  
class DiscoveryServerApplication  
  
fun main(args: Array<String>) {  
  runApplication<DiscoveryServerApplication>(*args)  
}

在我们的application.yml文件中,我们可以声明服务器端口和应用程序名称。

server:  
  port: 8761  
spring:  
  application:  
    name: "discovery-server" 

我们运行应用程序,我们在端口8761上启动并运行了Eureka实例。

下一步是开始创建我们的微服务Spring Boot应用程序,它将从配置服务器检索配置并将其注册到Eureka。使用Eureka,微服务将能够相互查看并共享数据。Spring Cloud中的微服务之间存在许多数据共享概念的实现。有Feign Clients的REST选项,使用RabbitMQ或Apache Kafka的消息代理的异步方法,以及许多其他基于业务逻辑需求的方法。我们将使用Feign Client演示一个示例。

让我们创建另一个微服务,一个将从其他微服务收集数据的服务。我们将其命名为“数据 - 服务”。首先,像上面的例子一样创建一个Kotlin Spring Boot应用程序。如您所见,我们对Eureka客户端具有依赖性,因此该服务将注册到Eureka Server。

<dependencies>  
  <dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-actuator</artifactId>  
  </dependency>  
    <dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>  
  </dependency>  
  <dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-starter-config</artifactId>  
  </dependency>  
  <dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-web</artifactId>  
  </dependency>  
  <dependency>  
    <groupId>org.jetbrains.kotlin</groupId>  
    <artifactId>kotlin-stdlib-jre8</artifactId>  
  </dependency>  
  <dependency>  
    <groupId>org.jetbrains.kotlin</groupId>  
    <artifactId>kotlin-reflect</artifactId>  
  </dependency>  
  <dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-test</artifactId>  
    <scope>test</scope>  
  </dependency>  
</dependencies>

我们还将@EnableEurekaClient添加到Application类。

@SpringBootApplication  
@EnableEurekaClient  
class DataServiceApplication  
  
fun main(args: Array<String>) {  
  runApplication<DataServiceApplication>(*args)  
}

在application.yml的resources文件夹中,我们具有以下属性:

spring:  
  application:  
    name: "data"  
eureka:  
  client:  
    healthcheck:  
      enabled: true  
server:  
  port: 8080  

我们可以选择一个名称,例如“data”来公开集群中的服务。Eureka将使用其声明的名称检测此服务。我们还声明服务器端口8080并启用向Eureka发送心跳的功能。

如果我们运行应用程序,我们会注意到它与Config Server连接。

Fetching config from server at: http://localhost:8888  
Tomcat started on port(s): 8080 (http) with context path ''  
EurekaAutoServiceRegistration : Updating port to 8080  
DataServiceApplicationKt   : Started DataServiceApplicationKt in 6.113 seconds (JVM running for 6.473)  
Located environment: name=data, profiles=[default], label=null, version=null, state=null  
Resolving eureka endpoints via configuration

上图是我们运行应用程序时来自日志文件的隔离消息,它显示了从配置服务器和集群中的应用程序配置文件获取配置。在此示例中,我们没有从Config Server到数据服务的特定配置,但您可以看到已建立连接。

如果我们回到配置服务器,我们可以通过将其添加到pom.xml依赖项来使其成为Eureka客户端:

<dependency>  
   <groupId>org.springframework.cloud</groupId>  
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>  
 </dependency>

将客户端名称设置为application.yml,以便更新的配置服务器application.yml文件将是:

server:  
  port: 8888  
spring:  
  application:  
      name: "config"  
  eureka:  
    client:  
      healthcheck:  
        enabled: true  
  profiles:  
    active: native  
  cloud:  
    config:  
      server:  
        native:  
          search-locations: classpath:config/

因此,我们创建了一个连接微服务系统来发现服务器。如果我们转到Eureka Server的网址http:// localhost:8761 /,我们可以看到它可视化。

我们创建了一个小型生态系统,可以检测所有服务。在第2部分中,我们将添加另一项服务,编写一些Kotlin代码,并使用Feign Client在微服务之间共享数据。

在那之前,快乐的编码吧!

原文标题《Kotlin Microservices With Spring Cloud Netflix: Part 1》

作者:Efthymios Vafeiadis

译者:February

不代表云加社区观点,更多详情请查看原文链接

原文链接:https://dzone.com/articles/kotlin-microservices-with-spring-cloud-netflix-par

原文作者:Efthymios Vafeiadis

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏LeoXu的博客

Tapestry 教程(二)依赖、工具以及插件

在我们深入代码之前,首先必须整好开发环境。你应该已经有了一些,或者因为各种原因,在你的开发机上全都已经有了。

942
来自专栏青玉伏案

JavaEE开发之SpringBoot工程的创建、运行与配置

本篇博客我们就来聊一下如何使用Eclipse+STS插件来创建Spring Boot的工程。Spring Boot可以使我们更容易的使用Spring框架,在Sp...

25310
来自专栏zhisheng

Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览

转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/04/15/springboot2_code/

912
来自专栏静默虚空的博客

[Spring]01_环境配置

1.1 Spring jar包下载 (1)进入官网http://repo.spring.io (2)在资源库界面点击Artifacts标签,然后点击libs-...

1879
来自专栏nummy

python 虚拟环境的使用

python3.3+已经支持虚拟环境,无需安装格外的包,通过以下命令即可创建虚拟环境:

1024
来自专栏JAVA同学会

Spring Cloud 服务的注册与发现(Eureka)

Eureka Server是服务的注册中心,这是分布式服务的基础,我们看看这一部分如何搭建。

1554
来自专栏颇忒脱的技术博客

利用VisualVm和JMX远程监控Java进程

在前一篇文章里我们发现通过jstatd + VisualVm的方式,不能获得Java进程的CPU、线程、MBean信息,这时JMX就要登场了。

1841
来自专栏JAVA同学会

Spring Cloud配置中心(Config)

Spring Cloud是现在流行的分布式服务框架,它提供了很多有用的组件。比如:配置中心、Eureka服务发现、 消息总线、熔断机制等。

1243
来自专栏nummy

flume配置实例

Flume agent的配置保存在配置文件中,同一个文件中可以同时配置多个agent。每个agent都需要配置source、channel、sink的信息。

932
来自专栏吴伟祥

如何彻底卸载MySQL 原

卸载了重新安装MYSQL,这一卸载出了问题,导致安装的时候安装不上,在网上找了一个多小时也没解决。    重装系统永远是个好办法,但有谁喜欢这么做呀:( ...

1291

扫码关注云+社区

领取腾讯云代金券