Я думаю на самом деле это немного проще.Пока вы не зависаете на netty и используете Camel 2.11+, вы можете использовать camel-urlrewrite
По сути, вы определяете одно правило перезаписи в конфигурации и добавляете его в свойКомплект маршрутов.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
"http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
<urlrewrite>
<rule>
<name>Generic Proxy</name>
<note>
This rule completely rewrites the url to call.
Basically, in Camel's "to", you could write whatever you want
</note>
<from>^/(.*?)/(.*)</from>
<to>http://$1.acme.com/flowdocv2/rest/$2</to>
</rule>
</urlrewrite>
Теперь вы можете использовать довольно простой маршрут:
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0" xmlns:cxf="http://camel.apache.org/schema/blueprint/cxf" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0
https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
<bean id="myRewrite" class="org.apache.camel.component.urlrewrite.HttpUrlRewrite">
<property name="configFile" value="class/path/to/proxyrewrite.xml" />
</bean>
<camelContext id="my_context" xmlns="http://camel.apache.org/schema/blueprint">
<route id="proxyRoute">
<from uri="jetty:http://localhost:9090/proxy" />
<to uri="jetty:http://somewhere/myapp2?bridgeEndpoint=true&throwExceptionOnFailure=false&urlRewrite=#myRewrite" />
</route>
</camelContext>
</blueprint>
Однако netty не поддерживается, поэтому я выбрал следующую лучшую вещь.
Когда вы вызываете http://localhost:9090/proxy/north/foo
, переписывание фактически изменит URL для вызова на http://north.acme.com/flowdoc2/rest/foo
.
Есть несколько предостережений с этим.Во-первых, вы должны использовать один из поддерживаемых компонентов для UrlRewrite.Во-вторых, кажется, что вы должны иметь файл конфигурации перезаписи в вас classpath - так что нет маршрута только для чертежей.Третье: я не проверял это, но я думаю, вы понимаете суть.Я делаю этот ответ вики-сообщества, чтобы другие, более способные, чем я, могли расширить этот ответ.