本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

!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请求示例:
curl -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获取未完成任务请求示例:
curl -k -X GET -v -H "Authorization: ApiKey app.proxy2.broker.example.de AppKey" [***]
响应: 返回任务对象数组
[ { "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>请求示例:
curl -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请求示例:
curl -k -X GET -v -H "Authorization: ApiKey app.proxy1.broker.example.de AppKey" [***]
响应: 返回结果对象数组
[ { "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请求示例:
curl -k -X GET [***]
响应 (Proxy):
HTTP/1.1 200 OK Content-Length: 0 Date: Mon, 27 Jun 2022 14:26:45 GMT
响应 (Broker):
{ "summary": "healthy", "vault": { "status": "ok" } }
{ "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读取的关联数据,可以是任意类型{ "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: 或直到此时间过去(如果没有特别说明,单位为秒),以先到者为准示例:
# 阻塞直到有5个结果可用或30秒过去 curl -k -X GET -H "Authorization: ApiKey app.proxy1.broker.example.de AppKey" [***]
为了更好地支持异步用例,开发版本支持服务器发送事件(Server-Sent Events)用于结果检索:
请求示例:
curl -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"]} ...
# 运行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
version: '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 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429