Java ActiveMQ 避免新的连接启动
Java ActiveMQ avoid new connection start
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
public class MessageSender {
public static ConnectionFactory factory = null;
public static Connection connection = null;
public static Session session = null;
public static Destination destination = null;
public static MessageProducer producer = null;
public static void sendMessage(String queueName,String messageContent) {
try {
factory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_BROKER_URL);
connection = factory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue(queueName);
producer = session.createProducer(destination);
TextMessage message = session.createTextMessage();
message.setText(messageContent);
producer.send(message);
System.out.println("Sent: " + message.getText() );
} catch (JMSException e) {
e.printStackTrace();
}
}
}
以上是我的 java JMS 代码,用于将消息推送到队列。每次我想要推送消息排队时,我都会像下面这样调用
MessageSender.sendMessage("orderdetailsQueue","OrderReceivedIdB6789");
因此,它会为每条消息调用 new connection.start()
。我如何概括这一点?
创建连接工厂然后在每个 sendMessage
中创建一个连接可能不是一个好主意。
您可以将此连接工厂初始化部分移至单例实用程序 class,它仅在实例化该实用程序 class 时创建一次连接工厂。还使用 PooledConnectionFactory
而不是创建连接池、会话和生产者的普通连接工厂。 sendMessage
应该通过调用 connectionUtil.getConnection()
获得连接。 sendMessage
中的其余代码看起来不错,只是您需要通过对这些对象调用 close()
来释放 finally
中的会话、生产者和连接。
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
public class MessageSender {
public static ConnectionFactory factory = null;
public static Connection connection = null;
public static Session session = null;
public static Destination destination = null;
public static MessageProducer producer = null;
public static void sendMessage(String queueName,String messageContent) {
try {
factory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_BROKER_URL);
connection = factory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue(queueName);
producer = session.createProducer(destination);
TextMessage message = session.createTextMessage();
message.setText(messageContent);
producer.send(message);
System.out.println("Sent: " + message.getText() );
} catch (JMSException e) {
e.printStackTrace();
}
}
}
以上是我的 java JMS 代码,用于将消息推送到队列。每次我想要推送消息排队时,我都会像下面这样调用
MessageSender.sendMessage("orderdetailsQueue","OrderReceivedIdB6789");
因此,它会为每条消息调用 new connection.start()
。我如何概括这一点?
创建连接工厂然后在每个 sendMessage
中创建一个连接可能不是一个好主意。
您可以将此连接工厂初始化部分移至单例实用程序 class,它仅在实例化该实用程序 class 时创建一次连接工厂。还使用 PooledConnectionFactory
而不是创建连接池、会话和生产者的普通连接工厂。 sendMessage
应该通过调用 connectionUtil.getConnection()
获得连接。 sendMessage
中的其余代码看起来不错,只是您需要通过对这些对象调用 close()
来释放 finally
中的会话、生产者和连接。