@ di- framework/ cloudfoundry
云创建连接器 @di-framework - 自动 VCAP_SERVICES 财务报告和审定财务报表 VCAP_APPLICATION ,强烈地打入ServiceInfo模型,SPI创建者可扩展注册,以及自动化的DI绑定.
被"春云"接通者所启发 (中文(简体) )spring-cloud-cloudfoundry-connector),此软件包精简运行 @di-framework 在Cloud Foundry和Tanzu应用服务上的应用.
特征
- 自动环境检测: 通过快速检测
CloudFoundryDetector财务报告和审定财务报表isCloudFoundry()。 。 。 . - 应用程序信息解析: 强烈打字
CloudFoundryApplicationInfo包含应用程序名称、URI、实例索引、空间、限制等. - 服务信息创建者( SPI): 广泛发现和规范型号,用于:
- 关系数据库: PostgreSQL, MySQL, MariaDB, SQLite (英语:
RelationalServiceInfo(中文(简体) ) - 重写/ 快取: Redis 独立, TLS, 集群(
RedisServiceInfo(中文(简体) ) - AMQP / 信件经纪人:兔子MQ, CloudAMQP (中文(简体) )
AmqpServiceInfo(中文(简体) ) - Blob 存储 / S3: MinIO, AWS S3, 对象存储器(
BlobStorageServiceInfo(中文(简体) ) - 用户提供的服务数字 :
cf cups海关服务UserProvidedServiceInfo(中文(简体) )
- 关系数据库: PostgreSQL, MySQL, MariaDB, SQLite (英语:
- DI 和装饰器集成数字 :
@CloudFoundryService('service-name')参数和财产注入@VcapApplication()应用程序元数据注入@EnableCloudFoundryConnectors()用于整个集装箱的自动接线
- 本地倒计时: 自动回落到标准本地环境变量(
DATABASE_URL, (中文(简体) ),REDIS_URL, (中文(简体) ),AMQP_URL, (中文(简体) ),S3_BUCKET)跑出"云铸"外.
安装
bun add @di-framework/cloudfoundry
快速启动
1. 使用 @EnableCloudFoundryConnectors 财务报告和审定财务报表 @CloudFoundryService
import { Container } from '@di-framework/core/decorators';
import {
CloudFoundryService,
EnableCloudFoundryConnectors,
RelationalServiceInfo,
RedisServiceInfo,
VcapApplication,
CloudFoundryApplicationInfo,
} from '@di-framework/cloudfoundry';
@EnableCloudFoundryConnectors()
@Container()
export class ApplicationService {
@VcapApplication()
private appInfo!: CloudFoundryApplicationInfo;
@CloudFoundryService('my-postgres-db')
private dbService!: RelationalServiceInfo;
@CloudFoundryService('my-redis-cache')
private redisService!: RedisServiceInfo;
start() {
console.log(`Running app ${this.appInfo?.applicationName}`);
console.log(`Database URI: ${this.dbService.uri}`);
console.log(`Redis host: ${this.redisService.host}:${this.redisService.port}`);
}
}
2. 通过程序发现 CloudFoundryEnvironment
import { CloudFoundryEnvironment } from '@di-framework/cloudfoundry';
const cfEnv = new CloudFoundryEnvironment();
if (cfEnv.isCloudFoundry()) {
const appInfo = cfEnv.getApplicationInfo();
console.log(`Space: ${appInfo?.spaceName}, Instance: ${appInfo?.instanceIndex}`);
// Retrieve primary relational database
const db = cfEnv.getRelationalServiceInfo();
if (db) {
console.log(`Connected to ${db.dialect} at ${db.host}:${db.port}/${db.database}`);
}
// Retrieve Redis service
const redis = cfEnv.getRedisServiceInfo();
if (redis) {
console.log(`Redis URI: ${redis.uri}`);
}
}
3. 定制服务创建者
您可以注册自定义服务信息创建者 ServiceInfoCreatorRegistry数字 :
import {
CloudFoundryServiceInfoCreator,
getDefaultRegistry,
RawVcapServiceData,
CloudFoundryServiceInfo,
} from '@di-framework/cloudfoundry';
export interface ElasticsearchServiceInfo extends CloudFoundryServiceInfo {
readonly uri: string;
}
export class ElasticsearchServiceInfoCreator implements CloudFoundryServiceInfoCreator<ElasticsearchServiceInfo> {
accept(data: RawVcapServiceData): boolean {
return data.label.includes('elasticsearch') || (data.tags || []).includes('elasticsearch');
}
createServiceInfo(data: RawVcapServiceData): ElasticsearchServiceInfo {
const creds = data.credentials || {};
return {
id: data.name,
name: data.name,
label: data.label,
tags: [...(data.tags || [])],
credentials: creds,
uri: String(creds.uri ?? 'http://localhost:9200'),
};
}
}
getDefaultRegistry().registerCreator(new ElasticsearchServiceInfoCreator());