2017-01-31 2 views
1

В настоящее время я изучаю Camel, и я не уверен, можем ли мы отправлять сообщения в очередь/тему activemq из верблюда с фиксированным интервалом.Camel продолжает отправлять сообщения в очередь через JMS через 1 минуту

В настоящее время я создал код в Scala, который ищет базу данных и создает сообщение и отправляет его в очередь после каждой минуты мы можем сделать это на верблюде.

У нас есть компонент таймера на верблюде, но он не создает сообщение. Я думал о чем-то подобном.

from("timer://foo?fixedRate=true&period=60000") 
.to("customLogic") 
.to("jms:myqueue") 
  1. Таймер начнется через минуту.
  2. Пользовательских логики будут делать базы данных поиска и создание сообщения
  3. Наконец отправить в очередь JMS

Я очень новый для Camel поэтому некоторый код будет очень полезен благодаря

Можете ли вы указать мне, как я могу создать этот метод customeLogic, который может создать сообщение и передать его следующему «.to (« jms: myqueue »)». Есть ли какой-то класс, который нуждается в наследовании/реализации, который передаст сообщение и т. Д.

+0

На ваш вопрос? То, что у вас есть, - это правильный путь. – Strelok

+0

Если вы хотите получить помощь, пожалуйста, добавьте некоторые детали к вашему вопросу: Я хочу иметь A, B, C Я пробовал X и Y, но он не работает и т. Д. –

+0

Стрелок и Вячеслав добавлено больше деталей в вопросе – user320478

ответ

1

Я думаю, ваш вопрос в том, как подключить пользовательскую логику Java к вашему маршруту верблюда, чтобы подготовить полезную нагрузку сообщения JMS.

Компонент JMS будет использовать кузов обмена как полезную нагрузку сообщения JMS, поэтому вам необходимо установить тело в пользовательской логике. Есть несколько способов сделать это.

Вы можете создать custom processor путем реализации интерфейса org.apache.camel.Processor и явно устанавливая новое тело на бирже:

Processor customLogicProcessor = new Processor() { 
    @Override 
    public void process(Exchange exchange) { 
     // do your db lookup, etc. 
     String myMessage = ... 
     exchange.getIn().setBody(myMessage); 
    } 
}; 

from("timer://foo?fixedRate=true&period=60000") 
    .process(customLogicProcessor) 
    .to("jms:myqueue"); 

Более элегантный вариант должен использовать Camel's bean binding:

public class CustomLogic { 
    @Handler 
    public String doStuff() { 
     // do your db lookup, etc. 
     String myMessage = ... 
     return myMessage; 
    } 
} 

[...] 

CustomLogic customLogicBean = new CustomLogic(); 
from("timer://foo?fixedRate=true&period=60000") 
     .bean(customLogicBean) 
     .to("jms:myqueue"); 

@Handler аннотация указывает Camel, какой метод он должен назвать. Если есть только один квалификационный метод, вам не нужна эта аннотация. Верблюд делает результат вызова метода новым телом на обмене, который будет передан компоненту JMS.

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