簡體   English   中英

可通過Weblogic servlet訪問ActiveMQ嵌入式代理

[英]ActiveMQ embedded broker accessible via Weblogic servlet

我想執行以下操作,但我不確定是否在浪費時間:我試圖在weblogic servlet中運行ActiveMQ嵌入式代理。 想法是,客戶端將能夠通過http連接到JMS,而嵌入式代理將為請求提供服務。 我知道這是一個瘋狂的主意,但這是一個遺留應用程序,許多客戶端代碼都依賴於JMS。 這個想法只是切換連接字符串並將庫添加到客戶端。 創建tcp連接時,它可以正常工作,但是我不知道如何將servlet映射到內部代理

這些限制是:

  • Weblogic配置中沒有更改(例如數據源,網橋,JMS等)
  • 沒有春天
  • 僅HTTP

這是來自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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM