Python 如何在AWS负载平衡器上使用ZeroMQ?

Python 如何在AWS负载平衡器上使用ZeroMQ?,python,amazon-web-services,zeromq,amazon-elb,internal-load-balancer,Python,Amazon Web Services,Zeromq,Amazon Elb,Internal Load Balancer,我有两个EC2实例(vm1、vm2)和一个内部网络负载平衡器,位于VPC中我的私有子网中。在vm1中,我运行一个程序来连接AWS负载平衡器: import zmq if __name__ == '__main__': context = zmq.Context() socket = context.socket(zmq.REQ) socket.connect("tcp://aws-loadbalancer-dns-name:1111") for i in ra

我有两个EC2实例(vm1、vm2)和一个内部网络负载平衡器,位于VPC中我的私有子网中。在vm1中,我运行一个程序来连接AWS负载平衡器:

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中,我还运行一个程序:

import zmq
import time

if __name__ == "__main__":
    context = zmq.Context()
    socket = context.socket(zmq.REP)
    socket.bind("tcp://*:1111")

    while True:
        msg = socket.recv()
        print('receive request:', msg)
        socket.send_string(str(msg))
        time.sleep(1)
它似乎失败了

如何调整AWS中的设置

还是我的代码有问题?非常感谢。

第一部分:“我的代码有什么问题吗?”: 不,ZeroMQ用例代码似乎没有问题

在hunt上,可以根据需要在MCVE源代码中添加任意多个调试跟踪点,以便详细记录它从何处获得以及实际动态报告的内容:

[ 'EADDRINUSE',          #           L3
  'EADDRNOTAVAIL',       #           L3
  'ECONNREFUSED',        #           L3
  'ENETDOWN',            # L1 / L2 / L3
  'ENODEV',              # L1
  'EFAULT',
  'EFSM',                # ZMQ Finite State Machine not in a state to obey this
  'EAGAIN',              # ZMQ Context() blocked
  'EINPROGRESS',
  'EINVAL',              # ZMQ did not recognise a valid value in param
  'EMTHREAD',
  'ENOBUFS',             # resources
  'ENOMEM',              # resources
  'ENOCOMPATPROTO',      # ZMQ protocol-handshaking
  'EPROTONOSUPPORT',     # ZMQ protocol 
  'ENOTSOCK',            # ZMQ resource - not recognised as an "own" socket
  'ENOTSUP',             # ZMQ cannot support a request
  'ETERM',               # ZMQ Context() already entered into a .term()-state
   ...
   ]

第二部分:“如何调整AWS中的设置?” 这部分有点棘手

首先,查阅合同参数。如果AWS运营商不允许您在实例之间启动TCP/IP服务,则除了重新协商合同(选择其他限制较少的产品)之外,其他任何步骤都不会有帮助

如果TCP/IP服务未被阻止,请咨询AWS操作员支持热线,在各个实例上允许哪些端口号。除了上面提到的操作员策略之外,操作系统可能还有一些进一步的限制端口号范围,如果您的应用程序使用O/S阻塞的
:/:
(在上面的用例MCVE中是
==1111
),任何尝试都会由于尝试使用禁止的资源而系统性地失败(改变
是最简单的补救办法,不是吗?)


对于任何其他情况,ZMQError将帮助您诊断被阻止操作的根本原因。可以根据需要在查找中添加任意数量的调试跟踪点。

为什么您认为zeromq==echo服务器?