!Logo
Samply.Beam是一个分布式任务代理,专为严格网络环境中的高效通信而设计。它提供跨严格网络边界的最常用通信模式、端到端加密和签名,以及基于易用REST API的证书管理和验证。
该镜像包含Samply.Beam的代理组件,作为分布式通信引擎的一部分,用于在受严格安全限制的网络环境中实现可靠、高性能的通信。
Samply.Beam特别适用于以下场景:
!Architecture Schema
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" [***]
响应:
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" [***]
响应: 返回任务对象数组
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" [***]
响应:
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" [***]
响应: 返回结果对象数组
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 [***]
响应 (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" } }
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读取的关联数据,可以是任意类型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读取的关联数据,可以是任意类型所有读取端点都支持长轮询,作为常规(重复)轮询的高效替代方案:
wait_count: API调用将阻塞,直到有这么多结果可用wait_time: 或直到此时间过去(如果没有特别说明,单位为秒),以先到者为准示例:
bash# 阻塞直到有5个结果可用或30秒过去 curl -k -X GET -H "Authorization: ApiKey app.proxy1.broker.example.de AppKey" [***]
为了更好地支持异步用例,开发版本支持服务器发送事件(Server-Sent Events)用于结果检索:
请求示例:
bashcurl -k -X GET -H "Authorization: ApiKey app.proxy1.broker.example.de AppKey" -H "Accept: text/event-stream" [***]
响应:
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=[***] \ -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 Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429