我使用Active MQ / JMS在核心java中实现了Message Listener。此侦听器的目的是在ActiveMQ上订阅主题,然后侦听从主题接收的消息。我的代码作为控制台应用程序正常工作。现在我需要将我的应用程序扩展到Web应用程序中,以便收到的消息可以在Web页面中使用,即JSP。我很困惑消息监听器如何在JSP中工作,我将如何接收和处理来自活动MQ主题的消息。到目前为止,我有以下代码,但在当前情况下似乎没有帮助:
<%!
public void handleReceivedMessages() {
String url = ActiveMQConnection.DEFAULT_BROKER_URL;
String subject = "XXXXX";
try {
ConnectionFactory connectionFactory
= new ActiveMQConnectionFactory(url);
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic(subject);
MessageConsumer consumer = session.createConsumer(topic);
MessageListener listner = new MessageListener() {
@Override
public void onMessage(Message message) {
try {
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
System.out.println("Received message : "
+ textMessage.getText() + "'");
}
} catch (JMSException e) {
System.out.println("Caught:" + e);
}
}
};
consumer.setMessageListener(listner);
try {
System.in.read();
} catch (IOException e) {
}
connection.close();
} catch (JMSException ex) {
// Logger.getLogger(Consumer.class.getName()).log(Level.SEVERE, null, ex);
}
}//end method
%>
我应该如何使用此代码,以便我可以打印我的网页上收到的主题的每条消息?
答案 0 :(得分:1)
加载网页时使用JSP页面来呈现HTML。在那之后,他们没有任何功能。
通常,您需要使用Spring创建Message Driven Bean(MDB)或something similar。 MDB将接收消息,处理数据并将其存储在某处(通常是数据库,但也可以是全局缓存,本地文件或类似文件)。然后,您的JSP只使用JMS消息存储的数据。
如果您真的希望消息更加动态地与用户交互 - 您可以使用来自客户端浏览器的JavaScript连接到ActiveMQ。 ActiveMQ发行版有一些例子。查看examples / mqtt / websocket或examples / stomp / websocket以查看一些正常工作的代码。