application-manager-tools/am-driver 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

application-manager-tools/am-driver

Composer 安装命令:

composer require application-manager-tools/am-driver

包简介

Symfony bundle and framework-agnostic core to integrate managed applications with Application Manager (orchestration, consumption, operational state).

README 文档

README

Symfony bundle and framework-agnostic PHP library to integrate managed applications with Application Manager (orchestration commands, consumption webhooks, operational state push).

Specification: cahier des charges connecteur AM.
OpenAPI 3.1.1 (récepteur + client AM + kit Swagger UI) : docs/openapi/README.md.
Manuel d’intégration (intégrateurs humains) : docs/MANUEL-INTEGRATION-INTEGRATEURS.md.
Intégration technique : docs/INTEGRATION.md. Même app Symfony qu’AM (dogfooding) : docs/INTEGRATION-SAME-APP.md. Écarts AM : docs/ECARTS-AM.md.

Install

composer require application-manager-tools/am-driver

PHP ^7.4, symfony/http-client and symfony/console ^5.4|^6.4|^7.0|^8.0.

Développement du bundle (Docker)

Comme le back ApplicationManager : ./bin/php exécute PHP dans le conteneur Compose (repli sur le PHP hôte si Docker est absent).

./install          # composer install + répertoires var/
./build            # image PHP (optionnel si BUILD_WHEN_INSTALL=true dans .env.local)
./bin/php -v
./bin/composer install
./bin/phpunit
./codecheck        # php-cs-fixer + phpstan + phpunit

Swagger UI (spec récepteur, port AM_DRIVER_SWAGGER_PORT, défaut 18098) :

docker compose up -d swagger-ui

Réceptacle HTTP (port hôte configurable via RECEPTACLE_PORT dans .env, défaut 18099) :

docker compose run --rm -p ${RECEPTACLE_PORT:-18099}:8099 php \
  php bin/am-driver serve --host=0.0.0.0 --port=8099 --data-dir=var/am-driver/receptacle

Variables Docker : .env (versionné) et .env.local (surcharges locales, non versionné).

Symfony quickstart (≈10 minutes)

  1. Register the bundle (Flex discovers it automatically, or):
// config/bundles.php
ApplicationManagerTools\AmDriver\Bridge\Symfony\AmDriverBundle::class => ['all' => true],
  1. Configure (see .env.local.dist):
# config/packages/am_driver.yaml
am_driver:
    am_base_url: '%env(AM_DRIVER_AM_BASE_URL)%'
    source: '%env(AM_DRIVER_SOURCE)%'
    route_prefix: am   # → /am/orchestration/commands, /am/instance-operational-state
    consumption_webhook_token: '%env(AM_DRIVER_CONSUMPTION_WEBHOOK_TOKEN)%'
    orchestration_callback_token: '%env(AM_DRIVER_ORCHESTRATION_CALLBACK_TOKEN)%'
    orchestration_command_token: '%env(AM_DRIVER_ORCHESTRATION_COMMAND_TOKEN)%'
    operational_state_token: '%env(AM_DRIVER_OPERATIONAL_STATE_TOKEN)%'
  1. Import routes:
# config/routes/am_driver.yaml
am_driver:
    resource: '@AmDriverBundle/Resources/config/routes.yaml'
  1. Implement the three handlers (your product logic only):
use ApplicationManagerTools\AmDriver\Core\Contract\CreateInstanceHandlerInterface;
use ApplicationManagerTools\AmDriver\Core\Dto\CreateInstanceHandlerResult;
use ApplicationManagerTools\AmDriver\Core\Dto\OrchestrationCommand;

final class MyCreateInstanceHandler implements CreateInstanceHandlerInterface
{
    public function handle(OrchestrationCommand $command): CreateInstanceHandlerResult
    {
        // provision tenant / DB / storage
        return CreateInstanceHandlerResult::fromArray([
            'startedAt' => (new \DateTimeImmutable())->format(\DATE_ATOM), // required
            'integrationInstanceId' => $tenantId, // required
            'location' => 'https://tenant.example/login', // free-form: any other key is relayed as-is to AM
        ]);
    }
}

CreateInstanceHandlerResult::fromArray() requires two non-empty keys: startedAt and integrationInstanceId. Every other key you provide (location, ...) is opaque to the bundle: it is relayed verbatim in the JSON body of the callback POSTed to Application Manager.

Register services with Symfony autoconfigure, or explicit tags in services.yaml.

  1. Optional: push consumption from your code:
$publisher->pushResourceConsumption($tenantId, 'proof_storage_mo');

source values (stable)

Product source
Captain Learning captain-learning
Accident Prediction accident-prediction
Application Manager (self-managed) application-manager

Core-only (no bundle)

Use classes under ApplicationManagerTools\AmDriver\Core\ and wire AmApiClient, OrchestrationCommandProcessor, ResourceSnapshotManager manually.

CLI (local development)

vendor/bin/am-driver serve --port=8099
vendor/bin/am-driver orchestration:simulate create
vendor/bin/am-driver state:push-sample
vendor/bin/am-driver consumption:push --tenant-id=... --resource-key=seats --value=12 --am-url=... --token=...

E2E loop (receptacle)

Terminal 1:

vendor/bin/am-driver serve --port=8099 --token-command=dev-command-token --token-state=dev-state-token

Terminal 2:

vendor/bin/am-driver orchestration:simulate create --token=dev-command-token
vendor/bin/am-driver state:push-sample --token=dev-state-token

Data is persisted under /tmp/am-driver-receptacle by default (--data-dir).

License

MIT

application-manager-tools/am-driver 适用场景与选型建议

application-manager-tools/am-driver 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 163 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 05 月 15 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「symfony-bundle」 「orchestration」 「application-manager」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 application-manager-tools/am-driver 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 application-manager-tools/am-driver 我们能提供哪些服务?
定制开发 / 二次开发

基于 application-manager-tools/am-driver 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 163
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 30
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-05-15