
!https://raw.githubusercontent.com/samply/beam/main/doc/Logo.svg
Samply.Beam是一个分布式任务代理,专为严格网络环境中的高效通信而设计。它提供跨严格网络边界的最常用通信模式、端到端加密和签名,以及基于易用REST API的证书管理和验证。
该镜像包含Samply.Beam的代理组件,作为分布式通信引擎的一部分,用于在受严格安全限制的网络环境中实现可靠、高性能的通信。
Samply.Beam特别适用于以下场景:
!https://raw.githubusercontent.com/samply/beam/main/doc/Architecture.svg
Samply.Beam由两个中央运行的组件和每个分布式节点上的一个代理组成:
系统中的每个组件都通过其层次结构的BeamId唯一标识:
app3.proxy2.broker1.samply.de <---------------------------> AppId <----------------------> ProxyId <---------------> BrokerId
创建任务
创建新任务,由指定的工作者处理。目前,body大小限制为10MB。
POST/v1/tasks请求示例:
bashcurl -k -v --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 Date: Mon, 27 Jun 2022 13:58:35 GMT
检索任务
工作者定期调用此端点检索提交的任务。
GET/v1/tasksfrom (可选): 仅获取由此ID创建的任务to (可选): 仅获取定向到此ID的任务filter (可选): 仅获取满足指定过滤条件的任务,支持filter=todo获取未完成任务请求示例:
bashcurl -k -X GET -v -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>请求示例:
bashcurl -k -X PUT -v --json '{"from":"app.proxy2.broker.example.de","metadata":["任意","类型","都是","可能的"],"status":"succeeded","body":"处理结果","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 Date: Mon, 27 Jun 2022 13:58:35 GMT
检索结果
任务提交者调用此端点检索结果。
GET/v1/tasks/<task_id>/results请求示例:
bashcurl -k -X GET -v -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
响应: 返回结果对象数组
json[ { "from": "app.proxy2.broker.example.de", "to": ["app.proxy1.broker.example.de"], "task": "70c0aa90-bfcf-4312-a6af-42cbd57dc0b8", "status": "succeeded", "body": "处理结果", "metadata": ["任意","类型","都是","可能的"] } ]
健康检查
监控Samply.Beam组件的运行状态。
GET/v1/health请求示例:
bashcurl -k -X GET https://proxy1.broker.example.de/v1/health
响应 (Proxy):
HTTP/1.1 200 OK Content-Length: 0 Date: Mon, 27 Jun 2022 14:26:45 GMT
响应 (Broker):
json{ "summary": "healthy", "vault": { "status": "ok" } }
任务(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": "broker可以读取并使用此字段,例如代表应用应用过滤器" }
id: 用于标识任务的UUIDfrom: 提交应用程序的BeamIDto: 允许检索任务和提交结果的工作者的BeamIDbody: 要完成的工作描述,Broker不解释failure_strategy: 建议每个客户端如何处理失败,可能的值为discard(丢弃)、retry(重试)failure_strategy.retry: 重试失败任务的次数(max_tries)和每次尝试之间的等待时间(backoff_millisecs)ttl: 生存时间,达到零后,broker将删除任务及其结果metadata: 可由broker读取的关联数据,可以是任意类型结果(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外的所有状态都需要,包含任务的实际结果 payload 或错误消息metadata: 可由broker读取的关联数据,可以是任意类型长轮询API访问
所有读取端点都支持长轮询,作为常规(重复)轮询的高效替代方案:
wait_count: API调用将阻塞,直到有这么多结果可用wait_time: 或直到此时间过去(如果没有特别说明,单位为秒),以先到者为准示例:
bash# 阻塞直到有5个结果可用或30秒过去 curl -k -X GET -H "Authorization: ApiKey app.proxy1.broker.example.de AppKey" https://proxy1.broker.example.de/v1/tasks/70c0aa90-bfcf-4312-a6af-42cbd57dc0b8/results?wait_count=5&wait_time=30s
服务器发送事件(SSE)API(实验性)
为了更好地支持异步用例,开发版本支持服务器发送事件(Server-Sent Events)用于结果检索:
请求示例:
bashcurl -k -X GET -H "Authorization: ApiKey app.proxy1.broker.example.de AppKey" -H "Accept: text/event-stream" https://proxy1.broker.example.de/v1/tasks/70c0aa90-bfcf-4312-a6af-42cbd57dc0b8/results?wait_count=3
响应:
HTTP/1.1 200 OK Content-Type: text/event-stream Cache-Control: no-cache Transfer-Encoding: chunked Date: Thu, 09 Mar 2023 16:28:47 GMT event: new_result data: {"body":"处理结果","from":"app2.proxy1.broker","metadata":{"complex":"可以是复杂类型"},"status":"succeeded","task":"70c0aa90-bfcf-4312-a6af-42cbd57dc0b8","to":["app1.proxy1.broker"]} ...
bash# 运行Samply.Beam Proxy docker run -d \ --name samply-beam-proxy \ -p 8080:8080 \ -e RUST_LOG=info \ -e PROXY_ID=proxy1.broker.example.de \ -e BROKER_URL=https://broker.example.de \ -v /path/to/privkey.pem:/etc/beam/privkey.pem \ -v /path/to/rootcert.pem:/etc/beam/rootcert.pem \ samply/beam-proxy:latest \ --privkey-file /etc/beam/privkey.pem \ --rootcert-file /etc/beam/rootcert.pem
yamlversion: '3.8' services: broker: image: samply/beam-broker:latest container_name: samply-beam-broker ports: - "8081:8080" environment: - RUST_LOG=info - BROKER_ID=broker.example.de - VAULT_URL=[***] - VAULT_TOKEN=your-vault-token - DATABASE_URL=postgres://user:password@db:5432/beam depends_on: - db - vault restart: unless-stopped proxy1: image: samply/beam-proxy:latest container_name: samply-beam-proxy1 ports: - "8082:8080" environment: - RUST_LOG=info - PROXY_ID=proxy1.broker.example.de - BROKER_URL=[***] volumes: - ./proxy1/privkey.pem:/etc/beam/privkey.pem - ./proxy1/rootcert.pem:/etc/beam/rootcert.pem command: --privkey-file /etc/beam/privkey.pem --rootcert-file /etc/beam/rootcert.pem depends_on: - broker restart: unless-stopped proxy2: image: samply/beam-proxy:latest container_name: samply-beam-proxy2 ports: - "8083:8080" environment: - RUST_LOG=info - PROXY_ID=proxy2.broker.example.de - BROKER_URL=[***] volumes: - ./proxy2/privkey.pem:/etc/beam/privkey.pem - ./proxy2/rootcert.pem:/etc/beam/rootcert.pem command: --privkey-file /etc/beam/privkey.pem --rootcert-file /etc/beam/rootcert.pem depends_on: - broker restart: unless-stopped db: image: postgres:14 container_name: samply-beam-db environment: - POSTGRES_USER=user - POSTGRES_PASSWORD=password - POSTGRES_DB=beam volumes: - postgres_data:/var/lib/postgresql/data restart: unless-stopped vault: image: hashicorp/vault:latest container_name: samply-beam-vault ports: - "8200:8200" environment: - VAULT_DEV_ROOT_TOKEN_ID=your-vault-token - VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200 cap_add: - IPC_LOCK
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务