Вызов конечной точки Camel, развернутой на удаленном сервере, из контрольного примера JUnit - PullRequest
0 голосов
/ 24 сентября 2011

Я новичок в Camel и должен доставить модуль в очень короткие сроки. Мой вопрос может быть очень простым, но я был бы очень признателен, если бы кто-то мог мне помочь.

Требуется вызвать службу конечной точки Camel, развернутую на сервере Tomcat, из контрольного примера jUnit. Сервис был внедрен с CamelContext и получил набор открытых методов, которые необходимо вызвать. Мы используем Spring 2.5 и Camel 2 в нашем проекте. Конфигурация Spring ниже

<bean name="/DispatcherService" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
    <property name="service" ref="dispatcherService">
    <property name="serviceInterface" value="test.DispatcherService">
</bean>

<camelContext id="dispatcherCamelContext" trace="true" xmlns="http://camel.apache.org/schema/spring">
    <route>
        <from uri="direct:dispatcherChannel" />
            <!-- use comma as a delimiter for String based values -->
            <recipientList delimiter=",">
                <header&gt;serviceEndpoints&lt;/header>
            </recipientList>
    </route>
</camelContext>

<bean id="dispatcherService" class="test.DispatcherServiceImpl">
    <property name="context" ref="dispatcherCamelContext" />
</bean>

Что я не могу найти, так это выяснить, как мы можем назвать URI конечной точки direct:dispatcherChannel, развернутого на сервере Tomcat (http://someIP:8080) из jUnit, который использует конфигурацию Spring.

Ответы [ 3 ]

1 голос
/ 26 сентября 2011

«Прямая» конечная точка доступна только из одной виртуальной машины.Если вам нужен внешний доступ к маршруту, вы можете сделать это с помощью JMX или связать его с другим маршрутом, используя JMS или HTTP .Любой подход позволит вам вручную протестировать / отладить развернутый маршрут ...

  • с JMX , вам просто нужно перейти к MBean контекста Camel (используяjconsole и т. д.) и выполните операцию sendBody ("direct: dispatcherChannel", "test message")

  • , чтобы обернуть маршрут по HTTP, просто добавьте этот маршрут, затем перейдите по этому URLв браузере для вызова маршрута ...

    from("jetty:http://0.0.0.0:9001/invokeDispatcherChannel")
    .to("direct:dispatcherChannel");
    
  • если вам нужно отправить полезную нагрузку, вы можете рассмотреть возможность выставить маршрут через JMS (или WS и т. д.) и преобразовать вожидаемый формат перед вызовом маршрута.Затем вы можете просто отправить сообщение в очередь (используя JMX, веб-консоль AMQ и т. Д.), Чтобы вызвать прямой маршрут.

    from("activemq:queue:invokeDispatcherChannel")
    .process(new MyMessageConverterProcessor())
    .to("direct:dispatcherChannel");
    
1 голос
/ 24 сентября 2011

Вы не можете сделать это, поскольку direct: конечные точки представляют прямые вызовы методов (т. Е. Вы должны находиться в том же процессе, что и приложение).Чтобы иметь возможность вызывать direct: конечные точки из тестов, вам нужно будет запустить CamelContext в самих тестах.Очевидно, что это применимо только тогда, когда вам нужно протестировать отдельные маршруты или ваш контекст действительно мал.

Тесты, взаимодействующие с уже развернутым приложением, следует рассматривать как интеграционные / системные тесты.Вы можете написать JUnit тесты для этих сценариев, но вы должны взаимодействовать с приложением через открытый интерфейс (http: конечные точки и т. Д.).

0 голосов
/ 09 октября 2011

Поскольку вы уже внедрили контекст верблюда в test.DispatcherServiceImpl, вам просто нужно использовать camel ProducerTemplate , чтобы отправить запрос в "direct: dispatcherChannel" следующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...