[英]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.