@ di- framework/ 绑定
土著 黄云 WIT服务对DI框架应用程序的约束.
每个混凝土等级都是DI标志,一个名字 hostInterfaces 条目和构建时间 WIT
页:1 将软件包映射到 hamCloud/ WASI 界面,而不是创建第二个
能力词汇.
这个包 消耗量 主机界面绑定 。 它不提供PostgreSQL, Redis, NATS, 或对象存储, 并且它永远不会嵌入秘密值。 儒格马普斯和秘密留在普鲁米, 地平面,Crossplane,Helm,或者另一个基础设施层.
约束
import { Component, Container } from '@di-framework/core/decorators';
import { KeyValue, Postgres, PlatformBinding } from '@di-framework/bindings';
@PlatformBinding('user-database')
@Container()
export class UserDatabase extends Postgres {}
@PlatformBinding('sessions', { interfaces: ['store', 'atomics'] })
@Container()
export class Sessions extends KeyValue {}
@PlatformBinding('cache')
@Container()
export class Cache extends KeyValue {}
@WasmCloudBinding 作为折旧的别名出口的 @PlatformBinding 用于反相; 新代码应当使用 @PlatformBinding。 。 。 .
把那些课放进去 src/bindings.ts。在 enCloud CLI 扩展名中发现文件,贡献
每个类到共享 WIT 要求图,生成真正的 WIT 来宾导入,并制作
匹配 hostInterfaces 条目。 PostgreSQL 条目省略 hostInterfaces[].name 以匹配
未加标签的导入; 绑定名仍然可以识别 DI 来宾及其配置覆盖 .
编译的来宾世界没有标签(import wasmcloud:postgres/[email protected]) 因为 qjs 组件无法
发射 cm-implements 标签进口到现在。 已导入 async funcs(后置、按键值、blobstore、,
信件、 秘密、 输出的 HTTP 组件 @di-framework/componentize-qjs
(时间48). 设定 DI_FRAMEWORK_COMPONENTIZE_QJS 以覆盖CLI.
wasi:[email protected] 正在同步,并与 stock jco 组成.
对于 PostgreSQL ,配置主机连接 WASH_POSTGRES_URL (或
WASMCLOUD_POSTGRES_URL 与CLI的 platform dev 命令)和设置
config: { database: 'orders' } 装订。 未命名的导入使用主机
连接和所选数据库; 多个独立认证的 PostgreSQL
此快速JS 路径尚未支持绑定 。 来宾先初始化
应用程序,包括模块启动时构建的绑定.
交易语义
wasmcloud:[email protected] 已经 query 财务报告和审定财务报表 queryBatch,没有交易处理。 每通电话都会响
到任何集合连接都是免费的。 命名导入( E)user-database-query服务于
无关联的每个证书池,所以 BEGIN 在一个呼叫中不覆盖下一个
语句。 A 类 COMMIT 能降落在从未见过的连接上 BEGIN连接
留下来 idle in transaction。 。 。 .
使用宾客 @di-framework/repo 打开绑定器 openPostgresDatabase 从
@di-framework/bindings/postgres。手柄是一个 AutocommitDatabase。每个声明是:
自有交易,以及 transaction(fn) 运行 fn 在同一个手柄上。 适配器从不发送
BEGIN, (中文(简体) ), COMMIT,或 ROLLBACK。 。 。 . FOR UPDATE 且咨询锁定仅对声明有效
带着它们.
在一个语句中保留一个不变量:
- 有条件
UPDATE … RETURNING - 数据修改CTE
INSERT … SELECT … WHERE NOT EXISTS
run 套装 changes 从一行回来。 提供者不报告命令标记,所以
计数为 a RETURNING 列表中选择一个选项。 A 类 changes 价值 0 意思是没有一行人回来了,这就是..
UPDATE 或者说 DELETE 无 RETURNING 报告,即使Postgres修改了行.
exec 将脚本作为一体发送 queryBatch。主机运行一个集合客户端的字符串,以及
Postgres将多语种简单的查询视为一个隐含的交易.
atomicBatch 用于一个只写到的序列,它必须做出或卷起,并且
不在发言之间阅读。 它使每个参数成为一字形(引文翻倍,负)
数字以括号表示,使其无法形成一个 -- 并提交该脚本为一体
queryBatch。脚本没有 BEGIN 或者说 COMMITPostgres 运行一个多声明简单
查询为一项隐含交易,然后将其卷回错误,返回集合客户端闲置.
asmCloud v 2. 8.0运行一个集合客户端的字符串:
crates/wash-runtime/src/plugin/wasmcloud_postgres/async_p3.rs 检查一个客户端
query_batch 和电话 client.batch_execute (单位:千美元)batch_with_client, 第191行).
import { openPostgresDatabase } from '@di-framework/bindings/postgres';
const db = openPostgresDatabase(database);
await db.atomicBatch([
{ sql: 'INSERT INTO t (name, n) VALUES (?, ?)', params: ["o'brien", -1] },
]);
@di-framework/repo 是此软件包的可选对等端。 主要内容 @di-framework/bindings 条目
让它卸下 导入 @di-framework/bindings/postgres 从一个客人,依赖
@di-framework/repo。 。 。 .
秘密材料被引用,从未内含:
@PlatformBinding('user-database', { secretFrom: 'orders-user-database' })
@Container()
export class UserDatabase extends Postgres {}
何时 secretFrom ,默认的 Kubernetes 秘密名称是 <application>-<binding>。 。 。 .
支助能力
| 类 | WIT 软件包 | 版本 |
|---|---|---|
Postgres | wasmcloud:postgres | 0.2.0 (中文(简体) ) |
KeyValue | wasmcloud:keyvalue | 0.2.0 (中文(简体) ) |
Blobstore | wasmcloud:blobstore | 0.1.0 (中文(简体) ) |
Messaging | wasmcloud:messaging | 0.3.0 (中文(简体) ) |
Config | wasi:config | 0.2.0-摄氏1度 |
Secrets | wasmcloud:secrets | 2.1.0 国家 |
OutgoingHttp | wasi:http client | 0.3.0 (中文(简体) ) |
软件包版本独立于WASI 0.3组件-模型预览.
单位测试
通过容器替换装订:
class FakeUserDatabase extends UserDatabase {
override query() {
return Promise.resolve([]);
}
}
testContainer.registerValue(UserDatabase, new FakeUserDatabase());
管理 PostgreSQL(即将发布)
@PlatformBinding('orders-db', { serviceName: 'orders' })
export class OrdersDatabase extends Postgres {}
以 di-framework platform service create postgres --name orders --wait。 。 。 .
部署将产生工作量自有的服务
连接机密。 多个绑定可以共享一个服务; 单独的服务使用
独立证书和PVC. serviceName 目前只支持 PostgreSQL
,不能与手动连接配置相组合.
见 postgreSQL 寿命周期和恢复 用于存储先决条件、保留和删除.