前言:
在微服务环境下,原先使用EOS开发的应用要如何才能快速的变成微服务应用?如何将EOS应用对外暴露RESTful接口,如何通过Swagger查看接口描述以及如何调用其他RESTful接口等等?这些就是EOS服务要解决的问题。
目录:
1.EOS服务
2.EOS服务开发
3.EOS服务治理
1.EOS服务
1.EOS服务是什么?
EOS服务是为了支持老EOS开发的应用可以快速融入到当前流行的微服务架构下而提供的一种实现方式。
EOS服务是通过.eosservice的描述文件将逻辑流暴露成对外服务,EOS服务支持RESTful的访问,未暴露成EOS服务的逻辑流无法由外部直接访问。
.eosservice文件内容,主要包括:
- name: 服务名称
- bizflow: 对应的逻辑流名称
- inputs: 输入参数列表
- outputs: 输出参数列表
2.EOS服务的Swagger描述
把逻辑流暴露成EOS服务后,可以支持通过在线查看RESTful接口描述。为了尽量和老应用保持兼容,path的后缀仍然为“.biz.ext”,method统一为“POST”
2.EOS服务开发
1. Hello World 示例
这是一个Hello World的示例,定义了一个输入/输出参数。通过Postman发送一个POST请求并加上Body参数:{"user": "luffy"},可以看到输出:{"hello":"Hello, luffy !"}
2. 文件上传/下载示例
- 文件上传
定义一个逻辑流,逻辑流的输入参数类型是“com.primeton.ext.access.http.IUploadFile”,文件上传支持一次上传多个文件,只要在输入参与勾选【数组】即可。该逻辑流执行完毕后,上传的文件就会被自动删除,如果想要长久保留,需要在逻辑流里将该文件复制到别的目录下。
- 文件下载
定义一个逻辑流,逻辑流的输出参数类型是“com.primeton.ext.access.http.IDownloadFile”,文件下载只支持一次下载一个文件,注意:该逻辑流执行完毕后,下载的文件就会被自动删除。
3. 调用其他EOS服务
调用其他EOS服务也比较简单,先选择一个需要调用的EOS服务名称,然后填入需要调用服务的具体地址(可以是ip:port,也可以是注册中心上的应用名),最后填上输入/输出参数。
4. 分布式事务
一个分布式事务必须由开始、结束图元组成。
分布式事务是基于Saga实现。在分布式事务的范围内,可以包含其他各种的图元(有些图元带补偿操作,有些图元不带补偿操作),当分布式事务范围内出现异常,会自动调用那些已成功执行过图元的补偿操作。
支持补偿操作的图元包括:
- Spring Bean调用图元: 在【高级】tab页里有补偿的输入框,可以选择的是同一个Spring Bean的不同方法,补偿的方法需要和原方法有一样的输入参数。
- EOS 服务调用图元: 在【高级】tab页里有补偿的输入框,补偿的输入框的值是一个URL,该URL指向的是另一个EOS服务,补偿的EOS服务需要和原服务有一样的输入参数。
3.服务治理
1. EOS服务列表
通过Govenor,可以看到一个应用的EOS服务列表,并支持对每个具体的服务进行上/下线操作,下线的服务再被访问时,会返回403。
代码语言:javascript复制{"error":"Forbidden by sdk-access-control(DISABLED_APIS)",
"message":"Access denied,the api is disabled,
api path: [/com.primeton.eos.sample.biz.sample01.biz.ext],
method: [POST]"}
2. EOS服务统计
在Govenor上还可以看到EOS服务的统计信息,包括:执行次数,执行时长以及正在运行的EOS服务。
3. EOS服务发布/授权
EOS服务还可以通过网关进行发布/授权,已授权的服务可以被其他系统的应用调用。其他系统的应用调用这种服务的时候需要在请求头里加上订阅凭证。
4. 应用日志查看
可以查看应用运行时的日志,和老EOS一样,仍然分为3种日志并支持在线调整日志级别:
- engine_trace:应用引擎日志的ROOT Logger Name
- log.sys:应用系统日志的ROOT Logger Name
- 其余名称是应用跟踪日志
5. 请求链路查看
通过请求链路可以查看一个请求是成功还是错误,请求处理时间是多少,以及它的调用链路:经过了多少应用,在每个应用内的耗时是多少。
6. API调用统计
API调用统计可以按照应用、实例组、实例、API来统计汇总请求信息,包括:响应状态码,请求数,最小响应时间,最大响应时间,平均响应时间以及响应时间总和。支持按应用、实例组、实例、API、时间段等条件进行查询以及按请求数和响应时间排序。
这次和大家分享了普元EOS服务相关的开发和治理,希望对大家有所帮助。不足之处,也请多多指正,谢谢。
关于作者:八点五分,普元高级软件工程师,开源技术爱好者,容器技术专家,曾参与浦东发展银行BPM项目、银联PAASV1等项目。