我想做以下事情并且我不确定我是不是在浪费时间:我正在尝试在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代理之间进行请求/响应映射。 另一件事是,我正在尝试解决由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
答案 0 :(得分:0)
我尝试做类似的事情,而我发现的事情是MessageListenerServlet - 我仍在寻找设置示例(我在处理相对较新的事情时) servlets)但我认为它应该允许这种事情。虽然我认为您的主要应用程序需要在启动时设置BrokerService,并且servlet只需要引用该地址。就我而言,我们并没有使用websphere,但是&#34;通过http&#34;从外部来源与嵌入式ActiveMQ实例交谈的一般前提。是一样的。