Tomcat ApacheCamelServlet HTTP代理
我试图在tomcat上使用ApacheCamel作为servlet实现http代理 当我使用camel作为独立应用程序时,Everythink运行良好:Tomcat ApacheCamelServlet HTTP代理,tomcat,servlets,apache-camel,Tomcat,Servlets,Apache Camel,我试图在tomcat上使用ApacheCamel作为servlet实现http代理 当我使用camel作为独立应用程序时,Everythink运行良好: public static void main(String[] args) throws Exception { CamelContext context = new DefaultCamelContext(); ConnectionFactory connectionFactory = new ActiveMQConnect
public static void main(String[] args) throws Exception {
CamelContext context = new DefaultCamelContext();
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("http://localhost:8000");
context.addComponent("test-http", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
context.addRoutes(new Router());
context.start();
}
static class Router extends RouteBuilder {
@Override
public void configure() throws Exception {
from("jetty:http://localhost:8000/api2/data/").to("http://localhost:8080/api2/data/?bridgeEndpoint=true");
}
}
但是如果我尝试在tomcat中作为servlet来做,我会在启动tomcat后立即出错
web.xml:
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>LoadBalancer</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:camel-config.xml</param-value>
</context-param>
</web-app>
我建议您阅读官方文件。您没有将
?bridgeEndpoint=true
放在到camel config.xml
的端点中,但它是在独立路径中,这正常吗?
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:camel="http://camel.apache.org/schema/spring"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route id="loadBalancer">
<from uri="http://localhost:8000/api2/data/"/>
<to uri="http://localhost:8080/api2/data/"/>
</route>
</camelContext>
</beans>
2017-01-15 14:23:29,104 [8000/api2/data/] ERROR DefaultErrorHandler - Failed delivery for (MessageId: ID-BobSheknowdas-51310-1484486605582-0-563 on ExchangeId: ID-BobSheknowdas-51310-1484486605582-0-564). Exhausted after delivery attempt: 1 caught: org.apache.camel.component.http.HttpOperationFailedException: HTTP operation failed invoking http://localhost:8080/api2/data/ with statusCode: 405
Message History
---------------------------------------------------------------------------------------------------------------------------------------
RouteId ProcessorId Processor Elapsed (ms)
[loadBalancer ] [loadBalancer ] [http://localhost:8000/api2/data/ ] [ 1]
[loadBalancer ] [to1 ] [http://localhost:8080/api2/data/?bridgeEndpoint=true ] [ 1]
Exchange
---------------------------------------------------------------------------------------------------------------------------------------
Exchange[
Id ID-BobSheknowdas-51310-1484486605582-0-564
ExchangePattern InOnly
Headers {breadcrumbId=ID-BobSheknowdas-51310-1484486605582-0-563, CamelHttpResponseCode=404, CamelRedelivered=false, CamelRedeliveryCounter=0, Content-Language=en, Content-Length=1006, Content-Type=text/html;charset=utf-8, Date=Sun, 15 Jan 2017 13:23:28 GMT}
BodyType org.apache.camel.converter.stream.InputStreamCache
Body [Body is instance of org.apache.camel.StreamCache]
]
Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------
org.apache.camel.component.http.HttpOperationFailedException: HTTP operation failed invoking http://localhost:8080/api2/data/ with statusCode: 405
at org.apache.camel.component.http.HttpProducer.populateHttpOperationFailedException(HttpProducer.java:228)
at org.apache.camel.component.http.HttpProducer.process(HttpProducer.java:156)
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:110)
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:105)
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:87)
at org.apache.camel.impl.DefaultScheduledPollConsumer.poll(DefaultScheduledPollConsumer.java:64)
at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:187)
at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:114)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)