我目前正在运行一个基本的RabbitMQ主题发布程序,每3秒钟发布一次。
我的类看起来像这样:
import com.rabbitmq.client.*;
import java.io.IOException;
public class EmitLogTopic {
private static final String EXCHANGE_NAME = "topic_logs";
@Scheduled(fixedRate = 3000)
public void publish(String[] argv)
throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.exchangeDeclare(EXCHANGE_NAME, "topic");
String routingKey = getRouting(argv);
String message = getMessage(argv);
channel.basicPublish(EXCHANGE_NAME, routingKey, null, message.getBytes());
System.out.println(" [x] Sent '" + routingKey + "':'" + message + "'");
channel.close();
connection.close();
}
//...
}
我希望每次运行“publish”方法时,它都会发布消息,然后关闭通道和连接,以防止新的连接和通道每个3秒钟被卡在内存中。
但是,当我查看RabbitMQ管理页面(概述页面),全局计数部分显示连接和通道的总数不断增加。
最终,我的应用程序因达到Socket限制和内存限制而崩溃。
因此,似乎close()不能删除使用的通道和连接,而是将它们保留在内存中,最终导致所有内存被消耗。有什么适当的方法可以确保它们不会这样做吗?
spring-amqp
。 - OrangeDog