基于现代Java技术栈的微服务架构

本文通过一个使用Java技术栈的微服务架构示例,涵盖了配置服务Config Server、服务发现、Item Service、Items UI、UI Gateway等组件。项目采用Spring Cloud Config作为配置中心,Spring Cloud Netflix Eureka实现服务发现。此外,还探讨了Item Service的实现,包括使用WebFlux和OpenFeign,以及UI Gateway的构建,利用Spring Cloud Gateway提供API集中管理。文章还涉及安全配置、Spring Cloud Sleuth的分布式追踪系统。
摘要由CSDN通过智能技术生成

现代Java技术栈里我们已经有了JDK 11,Kotlin,Spring 5,Spring Boot 2以及Gradle 5,还有可以用于生产环境的kotlin DSL,Junit 5,以及一大堆SpringCloud的类库,它们可以用来进行服务发现,创建API网关,客户端负载均衡,实现熔断器模式,编写声明式HTTP客户端,分布式跟踪系统,所有的这些。当然,要创建一个微服务的架构的话,并不需要上面所有的组件——但是这个过程会很有趣!

Microservices in Java

简介

在这篇文章里,你会了解一个使用Java技术栈的微服务架构,主要的组件列表如下(下面所列的版本是截止文章目前发布所使用的):

micro-service

我们的项目包含5个微服务:3个基础服务(配置服务Config Server,服务发现Service discovery server,UI网关 UI gateway)以及用于示例的前端(Item UI)和后端(Item Service):

micro-service2

接下来会依次介绍上面的组件。在实际的项目中,要实现具体的业务逻辑,所使用的微服务会比这个多。但是,在这个架构上只需要加上和Item UI以及Item Service类似的组件就可以了。

声明

这篇文章没有将容器化和微服务编排考虑进来,因为目前这个项目里还没有用到它们。

配置服务Config Server

我们这里使用Spring Cloud Config来作为统一的配置中心。配置可以从多种不同的数据源进行读取,例如,一个单独的git仓库。在这个项目里,为了方便,我们把它们放在应用资源里:

microservice-3

Config server的配置(application.yml)如下:

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

使用8888端口,可以让Config service客户端使用默认的配置,不需要在bootstrap.yml里指定端口。在启动的时候,客户端会用一个GET请求来通过Config server的HTTP API获取配置。

这个微服务应用本身的代码只有一个文件,它里面包含应用类(applicaiton class)的声明以及main方法,main方法和java代码有些不同,它是一个顶级函数:

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

其它微服务里的应用类(Application class)以及main方法都是类似的形式。

服务发现(Service Discover Service)

服务发现是一种微服务架构模式,它能隐藏应用之间的交互细节,让你不用关心应用实例的数量以及网络位置的变动。它的关键组件包含服务注册,微服务的存储,微服务实例以及网络位置(更多信息请参考这个)。

在这个项目里,服务发现是基于Netflix Eureka实现的,它是一个客户端服务发现:Eureka服务端会负责服务注册,客户端会请求Eureka服务端来获取应用实例列表,然后在向微服务发送请求之前通过Netflix Robbon来进行负载均衡。Netflix Eureka和很多其他Netflix OSS技术栈的其他组件(例如Hystrix和Ribbon)相似,都使用Spring Cloud Netflix来和Spring进行整合。

服务发现的配置文件,在资源文件里(bootstrap.yml),它只包含应用名以及标明在连接不上Config server的时候是否要中断服务启动的配置。

spring:
 application:
   name: eureka-server
 cloud:
   config:
     fail-fast: true

其他的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾听铃的声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值