rabbitmq 无法从Locust执行RMQ发布“BlockingIOError:[Windows错误10035]”

hi3rlvi2  于 2022-12-13  发布在  RabbitMQ
关注(0)|答案(1)|浏览(205)

我的项目要求客户端直接向Rabbit MQ发送消息,我们需要对此进行负载测试。
我试过PIKA,在普通的python文件中工作正常,但是当我试着在Locust中实现它时,由于兼容性问题,我开始出错
我试过PIKA Async、B-Rabbit等,但都不适用于Locust(Gevent)
我不必与蝗虫集成,但只要在这些Python文件上导入蝗虫就足以触发错误。
我在几个博客上读到过Geevent与鼠兔不兼容。

class RMQ:

    def __init__(self) -> None:
        self.connection = pika.BlockingConnection(pika.ConnectionParameters('localhost', credentials=pcredentails))
        self.channel = self.connection.channel()

    def connect(self):
        self.channel.basic_publish(exchange='locust_events', routing_key='python3', body='Hello World!')
        print("[x] Sent 'Hello World!'")

    def close(self):
        self.channel.close()
        self.connection.close()

错误:

BlockingIOError: [WinError 10035] A non-blocking socket operation could not be completed immediately

有人请让我知道一个可能的方法来解决这个问题
注意:B-rabbit确实说它是线程安全的,但当我发布“从服务器阅读超时”时,它仍然抛出错误,延迟12秒,只有当我使用locus时才会发生这种情况,否则它会很快

ckocjqey

ckocjqey1#

Pika有一个GeventConnection连接类,这就是你应该使用的。

**注意:**RabbitMQ团队监控rabbitmq-users邮件列表,仅在某些时候回答StackOverflow上的问题。

相关问题