การใช้ Future Framework ร่วมกัน Apache Camel เพื่อรอรับ Exchange จาก Endpoint สุดท้าย (2011-09-06)
บางครั้งเราต้องการทำงานกับ Camel มีการส่ง Message ไปยัง Endpoint ต่างๆ ตาม Route ที่เราสร้างขึ้น
และต้องการรอรับ Message จาก Enpoint สุดท้ายจาก Route เพื่อติดตามการทำงานของเราว่าสำเร็จลุล่วงหรือไม่
โดยใช้วิธีการส่งแบบ Asyncronize ดูได้จากตัวอย่างข้างล่างครับ ง่ายจริงๆ ผมรัก Camel ที่สุดในโลก
package com.zencode.camel;
import com.abctech.transition.webapp.camel.CamelBeanHelper;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.impl.DefaultExchange;
import java.util.concurrent.Future;
public class TestFuture {
public static void main(String[] args) throws Exception {
CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {
public void configure() {
from("direct:start").bean(TestFutureBean.class).bean(TestFutureBean2.class).log("Finished.........................");
}
});
context.start();
ProducerTemplate producerTemplate = context.createProducerTemplate();
Exchange exchange = new DefaultExchange(context);
exchange.getIn().setHeader("MyName", "pea");
exchange.getIn().setBody("Hello Pea");
CamelBeanHelper.dumpCamelHeaders(exchange);
Future<Exchange> future = producerTemplate.asyncSend("direct:start", exchange);
Exchange exchange2 = future.get();
CamelBeanHelper.dumpCamelHeaders(exchange2);
System.out.println(">>>>>>> "+ exchange2.getIn().getBody().toString() + " " + exchange2.getIn().getHeader("myHeader").toString() + " " + exchange2.getIn().getHeader("myHeader2").toString());
Thread.sleep(3000);
context.stop();
}
}
|
Bean Enpoint
public class TestFutureBean {
public void handleMessage(Exchange received) { received.getIn().setHeader("myHeader", "111"); String body = received.getIn().getBody().toString() + ", 111"; received.getIn().setBody(body); } }
======================================================================
public class TestFutureBean2 { public void handleMessage(Exchange received) { received.getIn().setHeader("myHeader2", "222"); String body = received.getIn().getBody().toString() + ", 222"; received.getIn().setBody(body); } }
ผลลัพธ์
>>>>>>> Hello Pea, 111, 222 111 222
|