Spring Boot 2.0集成和使用CSE( 三 )


".(=-cloud--app-.ler.,role=,stage=,=,=200,=rest)":0.,
".(=-cloud--app-.ler.,role=,stage=total,=count,=200,=rest)":0.
输出到日志文件
配置项:
cse....=true
输出参考:(截取了性能部分)
:
tps (ms) max-(ms) queue(ms) max-queue(ms) (ms) max-(ms)
rest.200:
0 0.000 727.756 0.000 23.542 0.000 704.214 -cloud--app-.ler.
//
常见问题
//
在使用新的框架对业务进行改造的时候,都会碰到一些问题 。
[原理]
()介绍了改造过程中可能碰到问题,以及一些通用的模式,可以阅读这个文章以评估改造的工作量 。下面列举了在改造IoT系统中碰到的几个常见问题及其解决方案 。
1
三方件冲突
在引入新的框架或者组件的时候,三方件冲突是非常常见的问题 。解决三方件冲突的前提是版本之间能够兼容 。冲突的原因可能很多,解决这类问题没有固定的思路,但掌握了maven依赖关系管理技巧以及理解冲突产生的原因后,通常分析和解决这类问题会变得更加简单 。
建议阅读[maven管理技巧]() 。
2
数据类型支持
CSE支持的标签定义REST接口,一般情况下,将的应用改造为CSE都会非常简单 。但是CSE和的运行时不同,设计目标也有差异,所以还会存在一些差异的地方 。这块的主要差异点是使用CSE定义REST接口,支持的和数据类型相对于变少了,
详细说明[参考]
() 。
比如,下面的一些REST接口定义在CSE中是不能使用或者有限制使用的 。
org..data..Page;
@( = { "", "" })
> (@umber, @ize)
该接口在定义的时候,Page是一个 。CSE不支持在接口定义上使用泛型,包括、等 。CSE做出这个限制的原因是因为CSE需要遵循规范,接口定义必须能够存在对应的描述 。如果使用和,那么则无法通过来描述这个接口 。
org..data..Page;
@( = { "", "" })
> (@umber, @ize)
该接口在定义的时候,Page是一个 。CSE不支持在接口定义上使用泛型,包括、等 。CSE做出这个限制的原因是因为CSE需要遵循规范,接口定义必须能够存在对应的描述 。如果使用和,那么则无法通过来描述这个接口 。
CSE的数据类型支持[说明]
()
解决方案
业务代码应该采用合理的分层设计,这样就可以保证代码能够非常灵活的在不同框架下进行迁移 。如果使用开发,分层设计可以遵循的一些建议 。业务逻辑在@中实现,框架接口发布在@实现 。当在不同框架发布服务的时候(比如、、CSE等),只需要简单的调整@代码,不需要修改@代码 。以上面的接口举个例子 。
@
@
{
( )
}
发布为的:
@
class{
@
;
@(value = "http://www.kingceram.com/")
> (@umber, @ize) {
ity
>(.(), .OK);
}
}
发布为:
class{
@
;
( req,resp) {
//
.(, .OK);
// send
}
}
发布为CSE的接口:
Class{
int ;
int ;
int ;
int size;
int ;
List ;
first;
last;
}
Class{
long id;
}
@(= "")
@(value = "http://www.kingceram.com/")
class{
@
;
@(value = "http://www.kingceram.com/")
> (@umber, @ize) {
Page pages = .();
//pages to
= ;
new >(, .OK);
}
}
1
依赖于 MVC特定机制的业务逻辑
在我们的改造步骤二中,去掉了,即 MVC REST提供的相关功能被移除了 。MVC提供的有些接口需要依赖于这个功能,移除后,会导致这部分功能无法使用 。比如:
org..web...;
org..web...utes;
@("()")