
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
!https://raw.githubusercontent.com/samply/beam/main/doc/Logo.svg
Samply.Beam是一个分布式任务代理,专为在严格的网络环境中进行高效通信而设计。它提供跨严格网络边界的常用通信模式、端到端加密和签名,以及基于易用REST API的证书管理和验证功能。
Samply.Beam特别适合以下场景:
!https://raw.githubusercontent.com/samply/beam/main/doc/Architecture.svg
Samply.Beam由两个中央运行组件和每个分布式节点上的一个代理组成:
系统中的每个组件都通过其分层的BeamId唯一标识:
app3.proxy2.broker1.samply.de <---------------------------> AppId <----------------------> ProxyId <---------------> BrokerId
CN=proxy2.broker2.samply.deSamply.Beam基于任务和结果的通信模型:
任务(Task)
json{ "id": "70c0aa90-bfcf-4312-a6af-42cbd57dc0b8", "from": "app7.proxy-hd.broker-project1.samply.de", "to": [ "app1.proxy-hd.broker-project1.samply.de", "app5.proxy-ma.broker-project1.samply.de" ], "body": "需要完成的工作描述", "failure_strategy": { "retry": { "backoff_millisecs": 1000, "max_tries": 5 } }, "ttl": "30s", "metadata": "代理可读取并使用此字段,例如代表应用应用过滤器" }
字段说明:
id:任务的UUID标识符from:提交应用的BeamID(由Proxy根据身份验证信息自动设置)to:允许检索任务并提交结果的工作者BeamID列表body:工作描述,Broker不解释此内容failure_strategy:建议客户端如何处理失败,可选值:discard(丢弃)、retry(重试)failure_strategy.retry:重试策略,max_tries(最大重试次数)和backoff_millisecs(重试间隔毫秒数)ttl:生存时间,超时后Broker将删除任务及其结果metadata:代理可读取的关联数据,可为任意类型结果(Result)
json{ "from": "app1.proxy-hd.broker-project1.samply.de", "to": [ "app7.proxy-hd.broker-project1.samply.de" ], "task": "70c0aa90-bfcf-4312-a6af-42cbd57dc0b8", "status": "succeeded", "body": "成功完成的结果数据", "metadata": ["任意", "数据", "类型", "都是", "允许的"] }
字段说明:
from:提交结果的客户端BeamIDto:结果的预期接收者BeamIDtask:关联任务的UUIDstatus:工作结果状态,允许值:claimed(已认领)、tempfailed(临时失败)、permfailed(永久失败)、succeeded(成功)body:结果负载,除claimed状态外,所有状态都需要此字段metadata:代理可读取的关联数据,可为任意类型且不加密创建任务
创建新任务,由指定的工作者处理。当前body大小限制为10MB。
POST/v1/tasksAuthorization: ApiKey <BeamID> <ApiKey>示例:
bashcurl -k --json '{"body":"生命、宇宙和一切的终极问题的答案是什么?","failure_strategy":{"retry":{"backoff_millisecs":1000,"max_tries":5}},"from":"app.proxy1.broker.example.de","id":"70c0aa90-bfcf-4312-a6af-42cbd57dc0b8","metadata":"代理可读取此字段","to":["app.proxy2.broker.example.de"],"ttl":"60s"}' \ -H "Authorization: ApiKey app.proxy1.broker.example.de AppKey" \ https://proxy1.broker.example.de/v1/tasks
响应:
HTTP/1.1 201 Created Location: /tasks/70c0aa90-bfcf-4312-a6af-42cbd57dc0b8 Content-Length: 0
注意:服务器可能忽略提交的id属性并自动生成自己的ID,应使用响应中Location头指定的URL来引用任务。
获取任务
工作者定期调用此端点来检索提交的任务。
GET/v1/tasksfrom (可选): 仅获取由此ID创建的任务to (可选): 仅获取定向到此ID的任务filter (可选): 仅获取满足指定过滤条件的任务
filter=todo: 匹配要由查询客户端处理的未完成任务Authorization: ApiKey <BeamID> <ApiKey>示例:
bashcurl -k -H "Authorization: ApiKey app.proxy2.broker.example.de AppKey" \ https://proxy2.broker.example.de/v1/tasks?filter=todo
响应:
json[ { "id": "70c0aa90-bfcf-4312-a6af-42cbd57dc0b8", "from": "app.proxy1.broker.example.de", "to": ["app.proxy2.broker.example.de"], "body": "生命、宇宙和一切的终极问题的答案是什么?", "failure_strategy": {"retry":{"backoff_millisecs":1000,"max_tries":5}}, "ttl": "60s", "metadata": "代理可读取此字段" } ]
创建结果
创建或更新任务的结果。当前body大小限制为10MB。
PUT/v1/tasks/<task_id>/results/<app_id>Authorization: ApiKey <BeamID> <ApiKey>示例:
bashcurl -k -X PUT --json '{"from":"app.proxy2.broker.example.de","metadata":["任意","数据类型","都是","允许的"],"status":"succeeded","body":"答案是42","task":"70c0aa90-bfcf-4312-a6af-42cbd57dc0b8","to":["app.proxy1.broker.example.de"]}' \ -H "Authorization: ApiKey app.proxy2.broker.example.de AppKey" \ https://proxy2.broker.example.de/v1/tasks/70c0aa90-bfcf-4312-a6af-42cbd57dc0b8/results/app.proxy2.broker.example.de
响应:
HTTP/1.1 204 No Content Content-Length: 0
获取结果
任务提交者调用此端点来检索结果。
GET/v1/tasks/<task_id>/resultsAuthorization: ApiKey <BeamID> <ApiKey>示例:
bashcurl -k -H "Authorization: ApiKey app.proxy1.broker.example.de AppKey" \ https://proxy1.broker.example.de/v1/tasks/70c0aa90-bfcf-4312-a6af-42cbd57dc0b8/results
响应:
json[ { "from": "app.proxy2.broker.example.de", "to": ["app.proxy1.broker.example.de"], "task": "70c0aa90-bfcf-4312-a6af-42cbd57dc0b8", "status": "succeeded", "body": "答案是42", "metadata": ["任意","数据类型","都是","允许的"] } ]
长轮询API访问
所有读取端点都支持长轮询,作为常规(重复)轮询的高效替代方案。
wait_count: API调用将阻塞,直到有这么多结果可用wait_time: 阻塞的最长时间(如果未指定单位,默认为秒)示例:
bash# 阻塞直到有1个结果可用或30秒过去 curl -k -H "Authorization: ApiKey app.proxy1.broker.example.de AppKey" \ https://proxy1.broker.example.de/v1/tasks/70c0aa90-bfcf-4312-a6af-42cbd57dc0b8/results?wait_count=1&wait_time=30s
服务器发送事件(SSE) API (实验性)
为了更好地支持异步用例,开发版本支持服务器发送事件(Server-Sent Events)用于结果检索。
GET/v1/tasks/<task_id>/results?wait_count=3Accept: text/event-stream示例:
bashcurl -k -H "Accept: text/event-stream" \ -H "Authorization: ApiKey app.proxy1.broker.example.de AppKey" \ https://proxy1.broker.example.de/v1/tasks/70c0aa90-bfcf-4312-a6af-42cbd57dc0b8/results?wait_count=3
响应:
event: new_result data: {"body":"答案是42","from":"app.proxy2.broker.example.de","metadata":["任意","数据类型","都是","允许的"],"status":"succeeded","task":"70c0aa90-bfcf-4312-a6af-42cbd57dc0b8","to":["app.proxy1.broker.example.de"]}
健康检查
监控Samply.Beam组件的运行状态。
GET/v1/healthProxy响应:
HTTP/1.1 200 OK Content-Length: 0
Broker响应:
json{ "summary": "healthy", "vault": { "status": "ok" } }
开发环境包含一个broker和两个proxy:
bash# 启动开发环境 ./dev/beamdev start # 或在后台运行服务 ./dev/beamdev start_bg docker-compose logs -f
启动Broker
bashdocker run -d \ --name beam-broker \ -p 8080:8080 \ -e RUST_LOG=info \ -e BROKER_ID=broker.example.de \ -e VAULT_ADDR=http://vault:8200 \ -e VAULT_TOKEN=your-vault-token \ samply/beam-broker:latest
启动Proxy
bashdocker run -d \ --name beam-proxy \ -p 8081:8080 \ -e RUST_LOG=info \ -e PROXY_ID=proxy1.broker.example.de \ -e BROKER_URL=http://broker:8080 \ -v ./privkey.pem:/app/privkey.pem \ -v ./rootcert.pem:/app/rootcert.pem \ samply/beam-proxy:latest
yamlversion: '3.8' services: vault: image: hashicorp/vault:latest ports: - "8200:8200" environment: - VAULT_DEV_ROOT_TOKEN_ID=dev-root-token - VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200 cap_add: - IPC_LOCK command: server -dev broker: image: samply/beam-broker:latest depends_on: - vault ports: - "8080:8080" environment: - RUST_LOG=info - BROKER_ID=broker.example.de - VAULT_ADDR=http://vault:8200 - VAULT_TOKEN=dev-root-token restart: unless-stopped proxy1: image: samply/beam-proxy:latest depends_on: - broker ports: - "8081:8080" environment: - RUST_LOG=info - PROXY_ID=proxy1.broker.example.de - BROKER_URL=http://broker:8080 - ROOTCERT_FILE=/app/rootcert.pem - PRIVKEY_FILE=/app/privkey.pem volumes: - ./proxy1/privkey.pem:/app/privkey.pem - ./proxy1/rootcert.pem:/app/rootcert.pem restart: unless-stopped proxy2: image: samply/beam-proxy:latest depends_on: - broker ports: - "8082:8080" environment: - RUST_LOG=info - PROXY_ID=proxy2.broker.example.de - BROKER_URL=http://broker:8080 - ROOTCERT_FILE=/app/rootcert.pem - PRIVKEY_FILE=/app/privkey.pem volumes: - ./proxy2/privkey.pem:/app/privkey.pem - ./proxy2/rootcert.pem:/app/rootcert.pem restart: unless-stopped
| 环境变量 | 描述 | 默认值 |
|---|---|---|
BROKER_ID | Broker的BeamID | broker.example.de |
VAULT_ADDR | Hashicorp Vault地址 | `[***] |
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

来自真实用户的反馈,见证轩辕镜像的优质服务