Java轻量微服务框架:Java-micro

Java-micro是一个轻量框架,允许开发人员轻松地在Java中开发微服务。 它是在Sixt开发的,花费2016整个年度时间,旨在推动创建一个新的平台。 该平台的起点支持两种主要语言,即Golang和Java。

可以使用Go Micro作为Go服务的框架,该框架的主要关注点是与Micro兼容。 这两种语言的框架在能力和方法上有点分歧,但它们确实兼容。

Micro框架处理了许多关注点,以便开发人员可以简单地专注于他的服务的功能。

特点:
1. 可以简单地只需将服务构建为docker容器或fat jar即可。
2. 可从环境,命令行和外部配置服务进行配置。
3. 标准化的json日志。
4. 标准化测量指标报告
5. 用于调用其他服务上的端点并处理来自它们的错误的简单接口。
6. 客户端负载平衡器
7. 简单的服务接口支持健康检查。
8. 数据库迁移内置。
9. 使用kafka简化事件处理。
10. 可插入服务注册表注册和发现服务实例。
11. 与Go Micro兼容,允许选择实现语言。
12. Guice依赖注入,以方便实现和测试场景。
13. 组件来创建服务集成测试场景。

服务注册器
服务注册表可以和不同的后端(consul等)集成,其主要目标是为每个服务实例(可能是一个匿名的IP地址和随机端口上)注册,以便其他实例可以定位该服务实例。 它也是可扩展的。 服务信息包含特殊格式的标签,其包含关于每个端点的请求和响应消息的格式以及其他标签的信息。

客户端负载平衡器
在RpcClient的表面后面有一个客户端负载平衡器。 这与服务注册器进行交互,以跟踪服务想要与之交互的服务的实例,跟踪它们的健康状态以便知道实例是否应该接收请求,并且跟踪每个rpc呼叫的响应结果,以便维护“断路器“功能,从而限制对非健康服务实例的暴露。

RpcClient和错误处理
为了允许服务调用其他服务,支持轻松创建RpcClient。 RpcClient是抽象另一个服务的rpc端点的对象。可以使用RpcClientFactory创建RpcClient。一旦有了RpcClient,调用另一个服务端点就像使用protobuf请求消息调用callSynchronous方法(未来版本的框架也将支持异步调用)一样简单,并且它将返回protobuf响应消息。

超时策略、重试策略和错误处理都由客户端处理。默认情况下,我们说如果响应是可重试的,默认的重试策略应该是重试失败的请求一次。在将来的版本中,我们将添加对时间预算的支持,其中服务的客户端可以设置允许为整个请求提供服务的时间。现在,我们有一个默认超时为1000ms的静态策略,并且可以根据客户端进行自定义。

RpcCallException类定义了所有的异常类别,它们的默认可检索设置,以及生成的HTTP状态代码(使用HTTP传输时)。当一个服务调用另一个服务(客户端调用服务器)时,如果服务器在处理响应期间抛出异常,则将该异常透明地传输回客户端,并可以在客户端重新抛出(忽略此处的重试方面)。

健康检查
每隔几秒钟,服务实例的运行状况将报告给服务注册器插件。使用注释,支持服务开发人员轻松挂钩到健康检查,以将服务实例标记为不合理。还有一个接口可以立即更改实例的运行状况。

配置处理
如果需要配置服务中的任何组件,它可以简单地获取注入到其中的ServiceProperties对象,并从中请求配置属性。属性位于三个位置:命令行,环境变量和配置插件。它们以此顺序应用。具有与后来源不同的值的相同属性将覆盖较早的源。配置插件提供了进行长轮询的能力,以便每个服务可以从任意源获得对配置更改的实时更新。有用于服务组件的钩子以获得配置改变的实时通知。

记录
有标准化的日志记录。日志记录是json对象,标记可用于在这些对象上动态创建属性。日志格式可以完全自定义。

测量指标
存在标准化的度量处理。这对Sixt的基础设施非常重视,并且使用以特定格式格式化的度量并发送到流入代理以报告回中心influxdb群集的度量。指标报告可插入,以支持任何所需格式的报告指标到任何所需的目的地。

卡夫卡活动
有很多工厂/建设者可以轻松地创建Kafka主题的发布商和订阅者。

输出
可以构建一个影子jar(fat jar - 包括所有依赖),或一个docker镜像。可以使用阴影jar进行开发人员测试。影子jar也是docker镜像任务的依赖。要在调试器中启动服务,请使用JettyServiceBase作为主类。

数据库迁移
目前支持Flyway数据库迁移,它支持许多不同的SQL数据库。这种支持扩展到仔细控制服务生命周期和健康检查。未来版本应支持DynamoDB实例的基本迁移支持。

依赖注入
依赖注入在java-micro中被大量使用。它严格支持Guice。

服务集成测试
我们在微服务项目中大量使用Sixt的自动化。为了支持这一点,框架给予开发人员自动化服务集成测试的能力。这意味着核心基础架构依赖(例如,在一个服务上,这是consul,postgres,zookeeper和kafka),并且服务本身作为docker-compose下的容器启动。另外,为了消除由于为每个其他服务依赖(及其依赖性等)启动容器而引起的问题,存在一个称为ServiceImpersonator的类,它可以用作服务注册表中可用的完整服务模拟,并提供真正的rpc请求。开发人员可以映射请求和响应,而不是为这些请求提供服务的实例。

可以使用设置'rpcClientRetries'覆盖默认RpcClient重试策略(1)。可以使用设置'rpcClientTimeout'覆盖默认RpcClient超时策略(1000ms)。


GitHub - Sixt/java-micro: Lightweight framework fo