我想做以下事情,但我不太确定我是否没有浪费时间:我正在尝试在 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 代理之间进行请求/响应映射。另一件事是,我正在尝试解决一些由 ActiveMQ 代理使用的 slf4j 引起的类路径冲突,并且已经花费了几个小时。但也许我只是在做一些不可能/非常愚蠢的事情。
当我尝试通过简单客户端进行连接时,出现此异常
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