±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcsdn£¬
ÎÄÕÂʹÓÃÒ»¸öʵÀýÀ´¼òµ¥µÄ½éÉÜÒ»ÏÂApache Camel£¬ÏêϸÇë¿´ÏÂÎÄ¡£ |
|
StackOverflowÉÏÓкܶàѧϰApache CamelµÄ×ÊÔ´£¬¶øÕâÀï½ö½öÊÇʹÓÃÒ»¸öʵÀýÀ´¼òµ¥µÄ½éÉÜÒ»ÏÂApache
Camel
»ù´¡
Apache Camelʮһ¸öJava¿âºÍÒýÇæ£¬ÓжàÖÖ²»Í¬µÄÕûºÏģʽ£¬È»¶øËû²¢²»ÊÇBPMN»òÕßESB£¬ËäÈ»¿ÉÒÔÔÚ´ËÒýÇæÏÂʵÏÖËûÃÇ¡£Apache
CamelÊÇÒ»¸ö±à³ÌÈËÔ±µ÷½Ú¡¢ÕûºÏÎÊÌâµÄ¹¤¾ß¡£
Message
org.apache.camel.MessageÊÇCamelÖÐÒ»¸ö»ù±¾µÄ°üº¬Êý¾ÝºÍ·ÓɵÄʵÌ壬Messages°üº¬ÁË
1.ΨһµÄʶ±ð£¨Unique Identifier£©--java.lang.StringÀàÐÍ
2.Í·ÐÅÏ¢£¨Headers£©--»áÌṩһЩÄÚÈݵÄÌáʾ£¬Í·ÐÅÏ¢±»×éÖ¯³ÉÃûÖµ¶ÔµÄÐÎʽ£¬string-->Object
3.ÄÚÈÝ£¨body£©ÊÇÒ»¸öObjectÀàÐ͵ĶÔÏó£¬Õâ¾ÍÒâζ×Å£¬ÄãҪȷ±£½ÓÊÕÆ÷Äܹ»Àí½âÏûÏ¢µÄÄÚÈÝ¡£µ±ÏûÏ¢·¢ËÍÆ÷ºÍ½ÓÊÕÆ÷ʹÓò»Í¬µÄÄÚÈݸñʽµÄʱºò£¬Äã¿ÉÒÔʹÓÃCamelµÄÊý¾Ýת»»»úÖÆ½«Æäת»»ÎªÒ»¸öÌØ¶¨µÄ¸ñʽ¡£ÔÚÐí¶àÇé¿öÏÂÔ¤Ïȶ¨ÒåÀàÐÍ¿ÉÒÔ±»×Ô¶¯×ª»»¡£
4.´íÎó±ê¼Ç(fault flag)ʹÓÃÀ´±ê¼ÇÕý³£»òÕß´íÎóµÄ±ê¼Ç£¬Í¨³£ÓÉһЩ±ê×¼ÀඨÒ壬ÀýÈ磨WSDL£©
Exchange
org.apache.camel.Exchange ÊÇÒ»¸öÏûÏ¢Ö®¼äͨÐŵijéÏóµÄ»á»°¡£ÏÂÃæÁгöµÄ¾ÍÊÇÕâÑùÒ»¸ö»á»°£¬Ê¹µÃ×é¼þ¸üÎªÈ«Ãæ
1.Exchange ID
2.MEP Ò»¸öÀàËÆInOnly»òÕßInOutµÄÏûÏ¢½»»»Ä£Ê½¡£µ±Ä£Ê½ÊÇInOnlyµÄʱºò£¬ÏûÏ¢½»»»ÖÐÖ»°üº¬IN-Message
3.ExceptionÔÚ·Óɹý³ÌÖеÄÈκÎÒì³£
4.PropertiesÓеãÀàËÆÓëmessage µÄheaders
£¬µ«ÊÇËûÃǽ«³ÖÐøµ½Õû¸öexchange½áÊø£¬Camel»¹¿ÉÄÜÀûÓÃËûÃǽøÐÐÒ»Ð©ÌØÊâµÄͨÐÅ¡£
5.IN-Message
6.OUT-Message
Camel Context
ÏÖÔÚÈÃÎÒÃÇÀ´¿´¿´Ò»ÕÅͼ£¬ÎÒÃÇ¿´µ½µÄÊÇһЩ²»Í¬µÄÏ໥Á´½ÓµÄ¹¹¼þ£¬¶øÔÚËûÃÇÖмäÆðÁ´½Ó×÷ÓõÄÕ³ºÏ¼Á¾ÍÊÇCamel
ContextÁË¡£Ëû½«ÊµÌåÁ´½ÓÒ»Æð£¬ÓеÄʱºò±»³ÆÎªCamelÔËÐÐÊÇÈÝÆ÷¡£

Endpoint
ÊÇCamelÖеÄÒ»¸ö»ù±¾¸ÅÄEndpoint×÷ΪCamelϵͳÖÐÒ»¸öͨµÀµÄ¶Ëµã£¬¿ÉÒÔ·¢ËÍ»òÕß½ÓÊÜÏûÏ¢¡£ÔÚCamelÖÐEndpointʹÓÃURIÀ´ÅäÖá£ÔÚÔËÐÐʱCamelͨ¹ýURIÀ´²éÕҶ˵㡣¶ËµãµÄ¹¦ÄÜÇ¿´ó¡¢È«Ãæ¶øÇÒÓÖ¿Éά»¤¡£À´¿´Ò»Ð©Àý×Ó¡£
//Pooling
on data/inbox every 2 seconds
file:data/inbox?delay=2000
//JMS queendpoid with name order
jms:queue:order
//Run's external Application with output.txt
as parameter.
exec:archiver.exe?output.txt |
Component
ComponentÊÇһЩEndpoints URIµÄ¼¯ºÏ¡£ËûÃÇͨ¹ýÁ¬½ÓÂëÀ´Á´½Ó£¨ÀýÈçfile:,jms:£©£¬¶øÇÒ×÷Ϊһ¸öendpointµÄ¹¤³§¡£ÏÖÔÚCamelÖÐÓÖ³¬¹ý80¸öComponent¡£µ±È»ÄãÒ»¿ÉÒÔͨ¹ýÀ©Õ¹org.apache.camel.impl.DefaultComponentÀ´ÊµÏÖ×Ô¼ºµÄComponent
Route
¹ËÃû˼Ò壬Route£¬¾ÍÊÇ·ÓÉ£¬Ëü¶¨ÒåÁËMessageÈçºÎÔÚÒ»¸öϵͳÖд«ÊäµÄÕæÊµÂ·¾¶»òÕßͨµÀ¡£Â·ÓÉÒýÇæ×ÔÉí²¢²»±©Â¶¸ø¿ª·¢Õߣ¬µ«ÊÇ¿ª·¢Õß¿ÉÒÔ×Ô¼º¶¨Òå·ÓÉ£¬²¢ÇÒÐèÒªÐÅÈÎÒýÇæ¿ÉÒÔÍê³É¸´ÔӵĴ«Ê乤×÷¡£Ã¿¸ö·Óɶ¼ÓÐÒ»¸öΨһµÄ±êʶ·û£¬ÓÃÀ´¼Ç¼ÈÕÖ¾¡¢µ÷ÊÔ¡¢¼à¿Ø£¬ÒÔ¼°Æô¶¯»òÕßֹͣ·ÓÉ¡£
·ÓÉÒ²ÓÐÒ»¸öÊäÈëµÄMessage£¬Òò´ËËûÃÇÒ²ÓÐЧµÄÁ´½Óµ½Ò»¸öÊäÈë¶Ëµã¡£Â·Óɶ¨ÒåÁËÒ»ÖÖÁìÓòÌØÓеÄÓïÑÔ£¨DSL£©¡£CamelÌṩÁËjava¡¢scalaºÍ»ùÓÚXMµÄRoute-DSL¡£
ʾÀý·ÓÉ£º
//simple route.
from("file:data/inbox").to("jms:queue:order") |
·ÓÉ¿ÉÒÔʹÓùýÂËÆ÷¡¢¶à²¥¡¢½ÓÊÕÁÐ±í¡¢²¢Ðд¦ÀíÀ´¶¨Ò壬´Ó¶ø±äµÃ·Ç³£Áé»î¡£ÓÉÓÚÕâÆªÎÄÕÂÖ»ÊǼòµ¥µÄ½éÉÜCamel£¬ÎÒÕâÀïÖ»¸ø³öÒ»¸ö×¢Ê͵ÄÀý×Ó¡£Õâ¸öʹÓÃÁË¡°direct:¡±¼Ü¹¹£¬ËûÌṩÁ˵±ÏûÏ¢Éú²úÕß·¢³öÏûÏ¢ºóÖ±½ÓµÄ¡¢Í¬²½µÄµ÷Óá£
//Every 10 seconds timer sends an Exchange to
direct:prepare
from("timer://foo?fixedRate=true&period=10000").
to("direct:prepare");
// Onother Routes can begin from "direct:prepare"
// This now depends on timer, logging and putting
a message to the
queue.
from(direct:prepare).to("log:com.mycompany.order?
level=DEBUG").
to("jms:queue:order?jmsMessageType=Text"); |
org.apache.camel.Processor ÊÇÒ»¸öÏûÏ¢½ÓÊÜÕߺÍÏûϢͨÐŵĴ¦ÀíÆ÷¡£µ±È»£¬ProcessorÊÇRouteµÄÒ»¸öÔªËØ£¬¿ÉÓÃÀ´ÏûÏ¢¸ñʽת»»»òÕ߯äËûµÄһЩ±ä»»¡£
Processor myProcessor = new Processor() {
public void process(Exchange exchange) {
exchange.getBody();
//e.g do something with Body..
}
};
from("file:data/inbox").filter(header("foo").isEqualTo("bar"))
.process(myProcessor).to("jms:queue:order")
|
ʾÀý
ʹÓÃmaven´´½¨Ò»¸öCamelÏîÄ¿£¨Camel ¼Ü¹¹¸ÅÀ¿£©¡£
mvn
archetype:generate -DgroupId=org.holbreich -DartifactId=filecopy
-DarchetypeGroupId=org.apache.camel.archetypes
-DarchetypeArtifactId=camel-archetype-java -Dversion=1.0.0-SNAPSHOT |
Õâ¸öÏîÄ¿°ü»»ÈçÏ´úÂ룺
package org.holbreich.filecopy;
import org.apache.camel.main.Main;
public class MainApp {
/**
* A main() so we can easily run these routing
rules in our IDE
*/
public static void main(String... args) throws
Exception {
Main main = new Main();
main.enableHangupSupport();
main.addRouteBuilder(new MyRouteBuilder());
main.run(args);
}
}
and
package org.holbreich.filecopy;
import org.apache.camel.builder.RouteBuilder;
/**
* A Camel Java DSL Router
*/
public class MyRouteBuilder extends RouteBuilder
{
/**
* Let's configure the Camel routing rules using
Java code...
*/
public void configure() {
// here is a sample which processes the input
files
// (leaving them in place - see the 'noop' flag)
// then performs content based routing on the
message using XPath
from("file:src/data?noop=true")
.choice()
.when(xpath("/person/city = 'London'"))
.to("file:target/messages/uk")
.otherwise()
.to("file:target/messages/others");
}
}
|
|