2

我在 VPC 的私有子网中有两个 EC2 实例( vm1、vm2 )和一个内部网络负载均衡器。在 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 中的设置?

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

4

1 回答 1

1

第一部分:“我的代码有问题吗? ”:

不,ZeroMQ 用例代码似乎没有问题。

随时根据需要在 MCVE 源中添加尽可能多的调试跟踪点,以便详细记录它的获取位置以及ZMQError()动态报告的实际情况:

[ '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 阻塞<transport-class>://<address>:<port#>== 1111在上面的用例 MCVE 中),任何尝试都会因尝试而系统性地失败使用禁止的资源(改变<port#>是最简单的补救措施,不是吗?)。

对于任何其他情况,这ZMQError将帮助您诊断操作被阻止的根本原因。在搜索过程中随意添加尽可能多的调试跟踪点。

于 2018-03-28T10:25:23.727 回答