Я хочу написать код для извлечения сообщений из Activemq
. Я не хочу извлекать все сообщения из Activemq
за раз, потому что мое требование заключается в том, что всякий раз, когда мое Java-приложение получает 1 сообщение от Activemq
, на основе тела сообщения я найду соответствующий HTTP Link
и вперед по этой ссылке. Для всей этой логики я написал 2 .java
имена файлов
MessageConsumer.java
MyListener.java
Файл MessageConsumer.java только для установления соединения. Соответствующий код приведен ниже.
package PackageName;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;
public class MessageConsumer extends HttpServlet {
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
try {
//creating connectionfactory object for way
ConnectionFactory connectionFactory=new
ActiveMQConnectionFactory("admin","admin","tcp://localhost:61617");
//establishing the connection b/w this Application and Activemq
Connection connection=connectionFactory.createConnection();
Session session=connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue=session.createQueue("MessageTesing");
javax.jms.MessageConsumer consumer=session.createConsumer(queue);
//fetching queues from Activemq
MessageListener listener = new MyListener();
consumer.setMessageListener(listener);
connection.start();
System.out.println("Press a key to terminate");
}
catch (Exception e) {
// TODO: handle exception
}
}
}
Файл MyListener.java предназначен для запуска соответствующих приложений. Код приведен ниже.
package PackageName;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
public class MyListener implements MessageListener {
public void onMessage(Message msg) {
try {
TextMessage msg1=(TextMessage)msg;
//just for your understanding I mention dummy code
System.out.println(msg1.getText());
if (msg1.getText()=="Google") {
System.out.println("Forwarding http link to Google");
}
else {
System.out.println("Forwarding http link to Facebook");
}
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
в моем посте я запускаю ссылки Google и Facebook. Но что касается моих требований, я буду называть свои собственные приложения. Каждое приложение занимает более 20 минут. Поэтому я хочу получать сообщения одно за другим. как только процесс предыдущего сообщения завершен, тогда только это получит другое сообщение от Activemq
.
Но точно знаю, что я получаю все сообщения одновременно. Как я могу это исправить. Я видел программу Activemq-Hellowworld
. Я не понял.
Извините, я новичок в Java
технологии. Кто-нибудь может мне помочь.
Спасибо.