ProducerTemplate не может отправить тело в прямую конечную точку

Я хотел бы использовать Camel в качестве точки интеграции для приложения, которое я разрабатываю. Мое намерение состоит в том, чтобы из моего приложения вводить сообщения в верблюда, а также получать сообщения от верблюда и через контекстный маршрут верблюда, что делать с этими сообщениями при запуске приложения. Из проведенного мной исследования следует, что ProducerTemplate/ConsumerTemplate — это способ общения с маршрутами, определенными в контексте верблюда. Однако, когда я публикую «direct:connect» с помощью ProducerTemplate, я получаю исключение «Нет доступных потребителей». Это происходит даже несмотря на то, что route1 может взаимодействовать с route2, и я получаю сообщение журнала, в котором говорится:

Route: route2 started and consuming from: Endpoint[direct://connect]

Может ли кто-нибудь дать рекомендации о том, как лучше всего использовать Camel для моих целей?

CamelEval.java

public class CamelEval {
    public static void main(String[] args) throws Exception {      
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext ("camel-streams.xml");
        SpringCamelContext sctx = new SpringCamelContext (ctx);
        sctx.start();

        sctx.createProducerTemplate().sendBody("direct:connect", "hello world");

        Thread.sleep (5000);
    }
}

верблюд-streams.xml

<camelContext trace="true" xmlns="http://camel.apache.org/schema/spring">
    <route>
        <from uri="stream:in?promptMessage=Enter Something: "/>
        <transform>
            <simple>${body.toUpperCase()}</simple>
        </transform>
        <to uri="direct:connect"/>
    </route>
    <route>
        <from uri="direct:connect"/>
        <to uri="stream:out"/>
    </route>
</camelContext>

person user2229657    schedule 17.05.2013    source источник


Ответы (1)


Вы получите 2 верблюда. В файле XML уже определено одно.

Что вам нужно сделать, так это попросить Spring предоставить вам этого верблюда из файла xml вместо создания нового верблюда с использованием кода

new SpringCamelContext

Проще всего указать camelContext и id в файле XML.

<camelContext id="myCamel" ...>

, а затем используйте Spring API для поиска bean-компонента с этим идентификатором

CamelContext sctx = (CamelContext) cxt.getBean("myCamel");
person Claus Ibsen    schedule 17.05.2013
comment
Конечно, объяснил, это на самом деле довольно очевидно, я полагаю, большое спасибо! - person user2229657; 17.05.2013