如何在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
相关产品推荐
相关产品推荐

