gpt4 book ai didi

java - 如何在tomcat启动时启动ActiveMQ?

转载 作者:行者123 更新时间:2023-11-30 03:14:33 25 4
gpt4 key购买 nike

如何配置 J2EE 应用程序以便可以调用 ActiveMQ 服务以及 tomcat 服务器?我知道嵌入式代理,这里询问如何在启动tomcat时启动ActiveMQ

当前代码(工作正常):现在我想删除main()方法并使用代码在tomcat运行时运行。

public class JMSService {


public void produceJMS() throws NamingException, JMSException {

ConnectionFactory connFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_BROKER_URL);

Connection conn = connFactory.createConnection();

conn.start();

Session session = conn.createSession(false,Session.AUTO_ACKNOWLEDGE);

Destination destination = session.createQueue("testQueue");

MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);

TextMessage message = session.createTextMessage("Test Message ");

// send the message
producer.send(message);

System.out.println("sent: " + message);
}}

这是我的消费者:

 public class JMSReceiver implements MessageListener,ExceptionListener {

public static void main(String args[]) throws Exception {

JMSReceiver re = new JMSReceiver();
re.receiveJMS();
}

public void receiveJMS() throws NamingException, JMSException {

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_BROKER_URL);
Connection connection = connectionFactory.createConnection();
connection.start();


Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

// Getting the queue 'testQueue'
Destination destination = session.createQueue("testQueue");


MessageConsumer consumer = session.createConsumer(destination);

// set an asynchronous message listener
JMSReceiver asyncReceiver = new JMSReceiver();
consumer.setMessageListener(asyncReceiver);

connection.setExceptionListener(asyncReceiver);

}

@Override
public void onMessage(Message message) {

System.out.println("Received message : " +message);
}

}

最佳答案

@Tim Bish 所说的是正确的。您要么需要一个计时器,例如接收器应该监听 1 小时,要么使其可用直到程序终止。无论哪种情况,您都需要启动您的消费者程序一次:

按如下方式更改您的 receiveJMS 方法:

 public void receiveJMS() throws NamingException, JMSException {
try{
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_BROKER_URL);
Connection connection = connectionFactory.createConnection();
connection.start(); // it's the start point


Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

// Getting the queue 'testQueue'
Destination destination = session.createQueue("testQueue");


MessageConsumer consumer = session.createConsumer(destination);

// set an asynchronous message listener
// JMSReceiver asyncReceiver = new JMSReceiver();
//no need to create another object
consumer.setMessageListener(this);

connection.setExceptionListener(this);

// connection.close(); once this is closed consumer no longer active

Thread.sleep(60 *60 * 1000); // receive messages for 1 hour
}finally{
connection.close();// after 1 hour close it
}

}

以上节目最长可听1小时。如果您希望它与程序运行一样长,请删除 finally block 。但推荐的方法是以某种方式关闭它。由于您的应用程序似乎是独立的,您可以检查 java runtime shutdown hook ,您可以在其中指定程序终止时如何释放此类资源。

如果您的使用者是一个 Web 应用程序,您可以在 ServletContextlistner 中关闭它。

关于java - 如何在tomcat启动时启动ActiveMQ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32945265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com