2024 新年快乐。
升级请参考 如何更新 Midway 中描述,请不要单独升级某个组件包。
本次 3.14 版本,重写了 Cache 组件,同时也带来了一些新的特性,我们将一一介绍。
这一版本,Midway 将底层依赖的 cache-manager
模块升级到了 v5 版本,由于存在 Breaking Change,启用了一个新的 @midwayjs/cache-manager
组件,原有 @midwayjs/cache
组件不再更新。
在新组件中,提供了装饰器 @Caching
用于快速缓存函数结果。
比如:
@Caching('default', 100)
async invokeData(name: string) {
return name;
}
那么,在多次调用时就会缓存返回值,如果超时,则会返回新的值。
await invokeData('harry');
await invokeData('harry1');
await invokeData('harry2');
await sleep(100);
await invokeData('harry3');
这在一些性能敏感的场景会非常有用。
此外,@Caching
装饰器还支持多级缓存,如果一个缓存实例配置了多个 Store,那么它将自动根据缓存的顺序进行处理。
最重要的一点,组件通过新设计器的 createRedisStore
方法支持复用 Redis 组件的配置了。
import { createRedisStore } from '@midwayjs/cache-manager';
export default {
cacheManager: {
clients: {
default: {
store: createRedisStore('default'),
},
},
},
redis: {
clients: {
default: {
port: 6379,
host: '127.0.0.1',
}
}
}
}
这下不再需要配置 Redis 多遍了。
更多功能可以接着查看 文档。
由于之前的版本无法传递 swagger-ui
参数,这个版本设计了一组新的 UI 渲染方式,尽可能的帮助开发者自定义 UI。
现在,通过 renderSwaggerUIDist
,renderJSON
和 renderSwaggerUIRemote
方法,你可以选择自己喜欢的方式进行渲染。
import { renderSwaggerUIRemote } from '@midwayjs/swagger';
export default {
swagger: {
swaggerUIRender: renderSwaggerUIRemote,
swaggerUIRenderOptions: {
}
},
}
只要网络环境允许,即使不再引用 swagger-ui-dist
包,也可以通过 CDN 资源加载 UI,进一步减轻服务端压力。
也可以仅输出 Swagger JSON
内容,不提供 UI,这都可以根据业务随心配置。
这一版本可以针对创建出的实例设置不同的实例优先级。
比如:
import { DEFAULT_PRIORITY } from '@midwayjs/core';
export default {
redis: {
clients: {
instance1: {
},
instance2: {
}
},
clientPriority: {
instance1: DEFAULT_PRIORITY.L1,
instance2: DEFAULT_PRIORITY.L3,
}
}
}
实例优先级不影响实例本身的功能,仅对实现了优先级判断的外部逻辑生效。
比如在健康检查时可以根据优先级进行忽略,低优先级的实例等价于弱依赖,会跳过健康检查。
这一功能目前仅有 HealthService
在使用,理论上别的逻辑也可能会用到,我们期待更多的可能性。
- mikro-orm 于 2024.01.08 日发布了 v6 版本,现在
@midwayjs/mikro
组件也可以配合 v6 版本使用了 @midwayjs/redis
增加了基于实例优先级的健康检查逻辑- 服务工厂增加了
getClients()
和 getClientKeys()
方法,用于快速迭代实例 - 修复了 swagger 组件 ApiOperation 相关的一些问题
- mwtsc 工具修复了 windows 下开发的问题
- 文档的进一步精简,“其他” 菜单合并到了 “使用文档” 菜单中
此外,还有一大批依赖进行了更新,更多可以参考我们的 ChangeLog。