[英]How can I call externalApplication based on Activemq message using JMS
我构建了3个应用程序,每个应用程序都需要20多分钟才能进行评估。我在以下目录中放置了3个文件
ProjectcContextPath/WEB-INF/classes/PackageName/ExternalFileProcess.class
ProjectcContextPath/JSPFiles/index.jsp
ProjectcContextPath/WEB-INF/classes/AnotherFile.class
我想基于message-head从另一个Java
文件名MessageConsumer.java
调用这3个应用程序。这些消息是从Activemq
获取的。
我不想一次获取所有消息。 一旦完成以前的任务,则只有MessageConsumer.java
从Activemq
获取另一条消息。
为了使您更好地理解,我制作了一些模型,请检查它们,检查后您会明白的。
工作流程:
Xml数据结构。
我做了什么:
我建立了最后3个应用程序,它们工作正常。
我编写了一个函数,如果您将xmlfilepath和Message-head值作为参数传递,那么它将返回相应的ApplicationRealPath
标记值。
我想做的事:
我想从Activemq
获取消息
从消息中查找消息头
将message-head和xml文件路径传递给另一个函数。获取相应的ApplicationRealPath
值。
并触发该应用程序。
一旦先前触发的应用程序过程完成,即可从Activemq
获取另一条消息
我真的是从3天开始尝试的,但仍然没有弄清楚。我尝试了以下代码。它不起作用
package PackageName;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
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 request, HttpServletResponse response)
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();
QueueSession session=(QueueSession) connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
Queue queue=session.createQueue("MessageTesing");
final QueueReceiver queueReceiver =session.createReceiver(queue);
connection.start();
while (true) {
Message message = queueReceiver.receive();
message.acknowledge();
TextMessage textmsg=(TextMessage) message;
if (textmsg.getText()=="TestMessage35") {
RequestDispatcher rd=request.getRequestDispatcher("servletName");
rd.forward(request, response ) ;
System.out.println(textmsg.getJMSDestination());
}
}
}
catch (Exception e) {
// TODO: handle exception
}
}
}
我是java的新手,可以用代码清楚地解释一下。
谢谢。
根据这些要求
您可以实现一个独立的应用程序,以这种方式同步接收消息(伪代码):
while (true) {
Message message = queueReceiver.receive();
TextMessage textmsg = (TextMessage) message;
if (textmsg.getText().equals("service1")) {
new Service1().execute();
} else if (textmsg.getText().equals("service2")) {
new Service2().execute();
} else {
// Show error
}
message.acknowledge();
}
该作业连续运行。
您的建议的不同之处
main
方法)而不是servlet。 servlet不适合(因为它不能连续运行) 更新
如果您的服务只能通过HTTP访问(servlet / JSP就是这种情况),那么您可以将它们实现为Web服务 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.