You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS负载均衡器上使用ZeroMQ?含EC2实例部署场景

在AWS VPC私有子网里用ZMQ搭配内部负载均衡的实操配置

最近我在AWS VPC的私有子网里部署了两台EC2实例(分别叫vm1和vm2),还配了一台内部网络负载均衡器,用来做ZMQ服务的负载转发。下面是两台实例上运行的代码,以及一些关键配置注意事项:

vm1(ZMQ请求客户端)的运行代码

这台实例作为REQ客户端,负责向负载均衡器发起请求:

import zmq
if __name__ == '__main__':
    context = zmq.Context()
    socket = context.socket(zmq.REQ)
    socket.connect("tcp://aws-loadbalancer-dns-name:1111")
    for i in range(5):
        socket.send_string(str(i))
        msg = socket.recv()
        print('receive respond:', msg)

vm2(ZMQ响应服务端)的运行代码

这台实例是REP服务端,原代码未写完,我补全了完整的服务端逻辑供参考:

import zmq
import time
if __name__ == "__main__":
    context = zmq.Context()
    # 创建REP套接字并绑定到本地1111端口
    socket = context.socket(zmq.REP)
    socket.bind("tcp://*:1111")
    while True:
        # 接收客户端请求
        msg = socket.recv_string()
        print(f"Received request: {msg}")
        # 模拟业务处理延迟
        time.sleep(1)
        # 返回响应给客户端
        socket.send_string(f"Response to request {msg}")

关键AWS配置细节

  • 负载均衡器监听设置:内部网络负载均衡器要将监听端口配置为1111(和ZMQ使用的端口一致),并把目标组关联到vm1、vm2的1111端口;目标组的健康检查建议用TCP连接检查,确保能准确识别服务状态。
  • 安全组规则配置:私有子网内的EC2实例安全组需允许TCP 1111端口的入站(来自内部NLB)和出站(到内部NLB)流量;内部NLB的安全组也要开放对应端口,允许和EC2实例通信。
  • ZMQ模式适配:REQ-REP是严格的请求-响应配对模式,AWS网络负载均衡器(NLB)基于TCP层转发,刚好适配这种场景,不会打乱ZMQ的消息交互逻辑。

内容的提问来源于stack exchange,提问作者Rick.Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:27:53