始终打开发布通道RabbitMQ

2024-09-30 05:28:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试集成snmptrapd和RabbitMQ,以便将陷阱通知传递到外部系统。在

我的系统由三个部分组成:

  • 一个带有snmptrapd和RabbitMQ(Publisher)的Linux虚拟机
  • 带有RabbitMQ(消费者)的Linux虚拟机
  • 一个带有docker的Linux裸机,这样我就可以有很多容器发送陷阱(使用nping)

snmptrapd部分很简单:

authCommunity execute mycom
traphandle default /root/some_script

在我的第一次尝试中,some_script是用Python编写的,但是性能并不完美(20个容器在10秒内每秒发送1个陷阱,我在消费者中只收到160条消息)。在

^{pr2}$

我切换到Perl,现在我可以得到200个陷阱/消息。在

我的Perl脚本使用^{}

#!/usr/bin/perl

use Net::AMQP::RabbitMQ;

foreach my $line ( <STDIN> ) {
    chomp( $line );
    $message = "$message\n$line";
}

my $mq = Net::AMQP::RabbitMQ->new();

$mq->connect("my_ip", {
    user     => "test",
    password => "test",
    vhost    => "/"
});

$mq->channel_open(1);
$mq->publish(1, "snmp", $message);
$mq->disconnect();

但我想要更好的。我尝试了200个容器,每秒发送一个陷阱,但失败得很惨,只收到了消费者10%左右的消息。在

我认为这与每次接收到的陷阱都必须在RabbitMQ中打开、发布和关闭通道的开销有关,因为在网络级别,我接收所有消息(通过tcpdump检查)。在

有没有一种方法可以保持始终打开的发布通道,这样我就不必重新打开/创建到队列的连接?在


Tags: 消息messagemylinux系统linerabbitmqscript
1条回答
网友
1楼 · 发布于 2024-09-30 05:28:30

询问您是否可以在不首先连接RabbitMQ服务器的情况下与它交谈,就像询问您是否可以在不首先连接到他们的电话的情况下(通过拨号和接听)与某人通话。在

如果你要发送多个消息,你真的应该重用你的连接,但是你确实需要一个连接!在

不管怎样,问题不在于出版商。如果丢失信息,那就是消费者的问题。在

相关问题 更多 >

    热门问题