如何从Web应用程序收听消息队列?(Tomcat,ActiveMQ)

我很高兴改进在Apache 上运行的 。一个 JMS服务器添加到发送和接收消息。


我已经可以发送和接收消息,但是在接收方需要帮助。

新消息到达,服务器应对其进行操作。例如:将数据添加到数据库或发送回消息。

我已经可以发送消息了。 这是代码。

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");

Connection connection = factory.createConnection();

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

Queue queue = session.createQueue("clientQueue");

MessageProducer publisher = session.createProducer(queue);

connection.start();

Message message = null;

message = session.createTextMessage("Text Message");

publisher.send(message);

请求后,我已经可以收到一条消息(单击;-))

connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");

connection = connectionFactory.createConnection();

connection.start();

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

destination = session.createQueue("serverQueue");

consumer = session.createConsumer(destination);

while (true) {

Message message = consumer.receive(300000);

//Do message stuff

}

建议的方法是什么?

热忱感谢所有帮助。 谢谢。

我添加了一个ServletContextListener来连续监听我的消息。

web.xml

<listener>

<listener-class>com.test.JMSContextListener</listener-class>

</listener>

Listeren:

public class JMSContextListener implements ServletContextListener {

@Override

public void contextInitialized(ServletContextEvent arg0) {

Thread thread = new Thread(new JMSConnector());

thread.start();

}

@Override

public void contextDestroyed(ServletContextEvent arg0) {

//Nothing

}

}

连接:

public class JMSConnector implements Runnable {

public void run() {

try {

Context context = new InitialContext();

QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup("java:comp/env/jms/ConnectionFactory");

Connection connection = factory.createConnection();

Queue queue = (javax.jms.Queue) context.lookup("java:comp/env/jms/serverQueue");

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

MessageConsumer consumer = session.createConsumer(queue);

//This MessageListener will do stuff with the message

MessageListenerImpl messageListener = new MessageListenerImpl();

consumer.setMessageListener(messageListener);

connection.start();

// Start connection or nothing will happen!!!

connection.start();

} catch (JMSException ex) {

//TODO

} catch (NamingException ex) {

//TODO

}

}

}

热忱感谢所有帮助。 谢谢。

回答:

如果您已经有一些代码可以使用队列中的消息(看起来就可以了),那么我认为您的问题归结于如何使这段代码运行。

看来您没有使用任何框架,所以我认为我采用的方法是采用可以从队列中检索消息的代码,并在应用程序服务器的单独线程中运行该代码。使该线程在应用程序服务器启动时启动,并在应用程序服务器关闭时整理自身。

在应用程序服务器启动时启动线程的最简单方法是引入ServletContextListener(此处为示例)。在Context

Listener中,在单独的线程中启动队列侦听代码。

我用这个建议的解决方案,并将上面的代码添加到问题。

以上是 如何从Web应用程序收听消息队列?(Tomcat,ActiveMQ) 的全部内容, 来源链接: utcz.com/qa/403638.html

回到顶部