Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Apache Camel¼ò½éÓëÈëÃÅ
 
  7745  次浏览      28
 2019-3-6 
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚ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");
}
}

   
7745 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö