1

我有一个用例,我必须将 msgs 从 dlq 移动到队列。我在 ECS 容器中使用 python 以编程方式创建了动态铲子。

def shovel_messsages(self, source_queue, dest_queue, message_count):
    hostname = os.environ['HOSTNAME']
    vhost = os.environ['RABBIT_VHOST']
    headers = {'content-type':'application/json'}
    user_name = os.environ['RABBIT_USERNAME']
    milli_sec = int(round(time.time() * 1000))
    shovel_name = 'test_{0}'.format(milli_sec)
    request_data = {
                "value":{
                   "src-protocol": "amqp091",
                    "src-uri": "amqp://"+user_name+"@/"+ vhost,
                    "src-queue":  source_queue,
                    "dest-protocol": "amqp091", "dest-uri": "amqp://"+user_name+"@/"+vhost,
                    "dest-queue": dest_queue,
                    "src-delete-after" : "queue-length"}
      }
    url = "http://{0}/api/parameters/shovel/{1}/{2}".format(hostname, vhost, shovel_name)
    response = requests.put(url=url, auth=(os.environ['RABBIT_USERNAME'],os.environ['RABBIT_PASSWORD']), data = json.dumps(request_data))

所有这一切都很好。现在我的问题是,在生产中打开这么多动态铲子会导致某种节流或任何此类 RMQ 连接问题吗?一旦达到目的,发出 DELETE 铲子是一个好习惯吗?还有其他更好的方法吗?

PS - 我正在监视队列以检查传入的消息到 dlqs。所以我可以选择全天以设定的频率运行上述功能。

4

1 回答 1

0

事实证明,可以有两种动力铲。一个不会自动删除,一个会自动删除。

上面帖子中创建的铲子使用了一个名为的属性src-delete-after,这意味着在创建铲子之前,它会记录源队列中的 itmem 数量,然后在完成传输那么多项目后自行删除。

于 2020-10-08T06:10:07.207 回答