【发布时间】:2017-09-11 14:48:59
【问题描述】:
我想编写用于从Activemq 提取消息的代码。我不想一次从Activemq 提取所有消息,因为我的要求是每当我的Java 应用程序收到来自Activemq 的1 条消息时,根据消息正文,我会找到相应的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 文件用于触发相应的 Applications.code 在下面
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 technology 的新手。谁能帮助我。
谢谢。
【问题讨论】:
标签: java jms activemq java-ee-6