RabbitMQ가 아닌 수신기를 통해 메시지를 수신하고 RabbitMQ를 통해 메시지를 처리하고 전달하는 Spring 3 애플리케이션이 있습니다. 메시지가 전송 될 때마다 새로운 RabbitMQ 연결이 생성됩니다. 이것은 약간 낭비가 보인다. 나는 이것이 정말로 필요한지 아니면 연결이 싱글 톤으로 유지 될 수없고 단지 여러 번 보내기를 위해서만 만들어 질 수있는 이유가 있는지 궁금 할 것입니다.메시지를 보낼 때마다 RabbitMQ 연결을 다시 작성해야합니까?
private void send(String routingKey, String message) throws Exception {
String exchange = applicationConfiguration.getAMQPExchange();
String ipAddress = applicationConfiguration.getAMQPHost();
String exchangeType = applicationConfiguration.getAMQPExchangeType();
String password = applicationConfiguration.getAMQPUser();
String user = applicationConfiguration.getAMQPPassword();
String virtualHost = applicationConfiguration.getAMQPVirtualHost();
String port = applicationConfiguration.getAMQPPort();
ConnectionFactory factory = new ConnectionFactory();
factory.setUsername(user);
factory.setPassword(password);
factory.setVirtualHost(virtualHost);
factory.setPort(Integer.parseInt(port));
factory.setHost(ipAddress);
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.exchangeDeclare(exchange, exchangeType);
channel.basicPublish(exchange, routingKey, null, message.getBytes());
log.debug(" [AMQP] Sent message with key {} : {}",routingKey, message);
connection.close();
}
또는 가능한 싱글 :
public class MyConnection {
private static MyConnection singleton = new MyConnection();
private static Connection connection;
private MyConnection() {
ConnectionFactory factory = new ConnectionFactory();
String exchange = applicationConfiguration.getAMQPExchange();
String ipAddress = applicationConfiguration.getAMQPHost();
String exchangeType = applicationConfiguration.getAMQPExchangeType();
String password = applicationConfiguration.getAMQPUser();
String user = applicationConfiguration.getAMQPPassword();
String virtualHost = applicationConfiguration.getAMQPVirtualHost();
String port = applicationConfiguration.getAMQPPort();
try {
factory.setUsername(user);
factory.setPassword(password);
factory.setVirtualHost(virtualHost);
factory.setPort(Integer.parseInt(port));
factory.setHost(ipAddress);
connection = factory.newConnection();
}
catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getInstance() {
return connection;
}
}
호 적어도 경우 싱글을 만들 수없는 한 가지 방법입니다 연결 또는 소켓 레벨 오류. – pinepain