我正在尝试集成snmptrapd和RabbitMQ,以便将陷阱通知传递到外部系统。在
我的系统由三个部分组成:
snmptrapd部分很简单:
authCommunity execute mycom
traphandle default /root/some_script
在我的第一次尝试中,some_script
是用Python编写的,但是性能并不完美(20个容器在10秒内每秒发送1个陷阱,我在消费者中只收到160条消息)。在
我切换到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检查)。在
有没有一种方法可以保持始终打开的发布通道,这样我就不必重新打开/创建到队列的连接?在
询问您是否可以在不首先连接RabbitMQ服务器的情况下与它交谈,就像询问您是否可以在不首先连接到他们的电话的情况下(通过拨号和接听)与某人通话。在
如果你要发送多个消息,你真的应该重用你的连接,但是你确实需要一个连接!在
不管怎样,问题不在于出版商。如果丢失信息,那就是消费者的问题。在
相关问题 更多 >
编程相关推荐