[英]ActiveMQ embedded broker accessible via Weblogic servlet
我想執行以下操作,但我不確定是否在浪費時間:我試圖在weblogic servlet中運行ActiveMQ嵌入式代理。 想法是,客戶端將能夠通過http連接到JMS,而嵌入式代理將為請求提供服務。 我知道這是一個瘋狂的主意,但這是一個遺留應用程序,許多客戶端代碼都依賴於JMS。 這個想法只是切換連接字符串並將庫添加到客戶端。 創建tcp連接時,它可以正常工作,但是我不知道如何將servlet映射到內部代理
這些限制是:
這是來自web.xml的servlet定義:
<servlet>
<servlet-name>ActiveMQServlet</servlet-name>
<servlet-class>com.mycompany.ActiveMQServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ActiveMQ</servlet-name>
<url-pattern>/servlet/ActiveMQServlet</url-pattern>
</servlet-mapping>
Servlet的重要部分:
public class ActiveMQServlet extends HttpServlet {
private BrokerService broker;
private static final Log log = LogFactory.getLog(new Object() {
}.getClass().getEnclosingClass());
@Override
public void init() throws ServletException {
log.info("Load activeMQ");
// configure the broker
try {
TransportConnector connector = new TransportConnector();
connector.setUri(new URI(ACTIVE_MQ_URL));
broker = new BrokerService();
broker.addConnector(connector);
broker.start();
log.info("ActiveMQ loaded succesfully");
} catch (Exception e) {
log.error("Unable to load ActiveMQ!", e);
}
}
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
log.info("Received call.... ");
log.info("Request: "+request);
//todo
}
問題是我不知道如何在servlet的服務方法和內部ActiveMQ代理之間進行請求/響應映射。 另一件事是,我正在嘗試解決由slf4j引起的一些類路徑沖突,該沖突由ActiveMQ代理使用,並且已經在其中花費了幾個小時。 但是也許我只是在做一些不可能/真的很愚蠢的事情。
當我嘗試通過簡單客戶端進行連接時,出現此異常
javax.jms.JMSException: Could not connect to broker URL: http://localhost:8888/myapp/servlet/ActiveMQServlet. Reason: java.io.IOException: Failed to perform GET on: http://localhost:8888/myapp/servlet/ActiveMQServlet as response was: Not Found
at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:35)
at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:293)
at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:191)
...
Caused by: java.io.IOException: Failed to perform GET on: http://localhost:8888/myapp/servlet/ActiveMQServlet as response was: Not Found
at org.apache.activemq.transport.http.HttpClientTransport.doStart(HttpClientTransport.java:275)
at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:55)
這樣做時,不執行servlet中的代碼。 servlet路徑很好。 如果在瀏覽器中將其打開,則會顯示空白頁面和日志消息。
我正在使用ActiveMQ 5.8.0和Weblogic 10.3.6
我正在嘗試做類似的事情,而我發現的是MessageListenerServlet-我仍在尋找有關設置它的示例(我在處理servlet方面相對較新),但我認為它應該允許這種事情。 盡管我認為您的主要應用程序必須是在啟動時設置BrokerService的應用程序,而servlet只需要引用地址即可。 在我的情況下,我們沒有使用Websphere,但是“通過http從外部源與嵌入式ActiveMQ實例對話”的一般前提是相同的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.