2016-07-18 2 views

ответ

1

Camel действительно позволяет вам setup routes using OSGi Blueprint. Он также позволяет использовать Property Placeholders with Blueprint values. Но вам нужно будет поместить эти значения в URI.

Таким образом, вы могли бы использовать что-то вроде:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"> 
    <cm:property-placeholder persistent-id="my-placeholders" update-strategy="reload"> 
     <cm:default-properties> 
      <cm:property name="maxTotalConnections" value="200"/> 
      <cm:property name="connectionsPerRoute" value="20"/> 
     </cm:default-properties> 
    </cm:property-placeholder> 

    <camelContext xmlns="http://camel.apache.org/schema/blueprint"> 
     <route> 
      <from uri="timer:test" /> 
      <to uri="http4:localhost:80/resource?maxTotalConnections={{maxTotalConnections}}&amp;connectionsPerRoute={{connectionsPerRoute}}" /> 
     </route> 
    </camelContext> 

</blueprint> 

компонентов опции устанавливается, когда первый маршрут создается с помощью этого компонента. Глядя в коде, maxTotalConnections и connectionsPerRoute устанавливаются при creating a new endpoint так:

HttpClientConnectionManager localConnectionManager = clientConnectionManager; 
if (localConnectionManager == null) { 
    // need to check the parameters of maxTotalConnections and connectionsPerRoute 
    int maxTotalConnections = getAndRemoveParameter(parameters, "maxTotalConnections", int.class, 0); 
    int connectionsPerRoute = getAndRemoveParameter(parameters, "connectionsPerRoute", int.class, 0); 
    localConnectionManager = createConnectionManager(createConnectionRegistry(x509HostnameVerifier, sslContextParameters), maxTotalConnections, connectionsPerRoute); 
} 

После первого маршрута является установка, то clientConnectionManager устанавливается. Для любых других маршрутов, установленных после первого, поскольку clientConnectionManager привязан к одному экземпляру компонента Http4, похоже, что эти параметры игнорируются. Я бы использовал одни и те же параметры компонента на всех маршрутах.

Вы можете создавать новые компоненты HTTP4, создавая новые компоненты и предоставляя им идентификатор. Вы можете использовать это для создания нескольких компонентов http4 с различными параметрами компонентов.

<bean id="http4-foo" class="org.apache.camel.component.http4.HttpComponent"/> 
<bean id="http4-bar" class="org.apache.camel.component.http4.HttpComponent"/> 

Затем просто используйте эти идентификаторы при настройке конечных точек.

<to uri="http4-foo:localhost:80/resource?maxTotalConnections=300"/> 
+0

Что такое 'connectionsPerHost'? Я не нашел его в доке. Вы имеете в виду 'maxTotalConnections'? – tuk

+0

Ой, да, это была просто ошибка. Почини. – AndyN

+0

Если у меня есть несколько маршрутов на моем верблюде, я должен «maxTotalConnections» для каждого маршрута, как вы показали в ответе? Если да, то если я дам 'maxTotalConnection' как' x' в одном маршруте и 'maxTotalConnections' как' y' в одном маршруте, как будет вести себя маршрут верблюда-http? – tuk

Смежные вопросы