ACTIVEMQ研究和分析Word文档下载推荐.docx
- 文档编号:22704063
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:54
- 大小:720.58KB
ACTIVEMQ研究和分析Word文档下载推荐.docx
《ACTIVEMQ研究和分析Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《ACTIVEMQ研究和分析Word文档下载推荐.docx(54页珍藏版)》请在冰豆网上搜索。
org.apache.activemq.util.MemoryPropertyEditor
⏹数据格式
CamelsupportsapluggableDataFormat
toallowmessagestobemarshalledtoandfrombinaryortextformatstosupportakindofMessageTranslator.
Thefollowingdataformatsarecurrentlysupported
∙ArtixDataServices
∙Bindy
∙CSV
∙EDI
∙FlatpackDataFormat
∙HL7DataFormat
∙JAXB
∙JSON
∙Serialization
∙String
∙TidyMarkup
∙XmlBeans
∙XMLSecurityDataFormat
∙XStream
∙ZipDataFormat
Unmarshalling
IfyoureceiveamessagefromoneoftheCamelComponentssuchasFile,HTTPorJMSyouoftenwanttounmarshalthepayloadintosomebeansothatyoucanprocessitusingsomeBeanIntegrationorperformPredicateevaluationandsoforth.TodothisusetheunmarshalwordintheDSLinJavaortheXmlConfiguration.
Forexample
DataFormatjaxb=newJaxbDataFormat("
com.acme.model"
);
from("
activemq:
My.Queue"
).
unmarshal(jaxb).
to("
mqseries:
Another.Queue"
TheaboveusesanamedDataFormatofjaxbwhichisconfiguredwithanumberofJavapackagenames.YoucanifyoupreferuseanamedreferencetoadataformatwhichcanthenbedefinedinyourRegistrysuchasviayourSpringXMLfile.
YoucanalsousetheDSLitselftodefinethedataformatasyouuseit.ForexamplethefollowingusesJavaserializationtounmarshalabinaryfilethensenditasanObjectMessagetoActiveMQ
file:
//foo/bar"
unmarshal().serialization().
Some.Queue"
Marshalling
Marshallingistheoppositeofunmarshalling,whereabeanismarshalledintosomebinaryortextualformatfortransmissionoversometransportviaaCamelComponent.Marshallingisusedinthesamewayasunmarshallingabove;
intheDSLyoucanuseaDataFormatinstance,youcanconfiguretheDataFormatdynamicallyusingtheDSLoryoucanrefertoanamedinstanceoftheformatintheRegistry.
ThefollowingexampleunmarshalsviaserializationthenmarshalsusinganamedJAXBdataformattoperformakindofMessageTranslator
unmarshal().serialization().
marshal("
jaxb"
⏹事务模型
⏹点对点传输模式
⏹发布订阅模式
UsingRoutingLogic
Anotheroptionistoexplicitlylistthepublish-subscriberelationshipinyourroutinglogic;
thiskeepstheproducerandconsumerdecoupledbutletsyoucontrolthefinegrainedroutingconfigurationusingtheDSLorXmlConfiguration.
UsingtheFluentBuilders
RouteBuilderbuilder=newRouteBuilder(){
publicvoidconfigure(){
from("
seda:
a"
).multicast().to("
b"
"
c"
d"
}
};
⏹请求响应模式
ForexamplewhenusingJMSwithInOutthecomponentwillbydefaultperformtheseactions
∙createbydefaultatemporaryinboundqueue
∙settheJMSReplyTodestinationontherequestmessage
∙settheJMSCorrelationIDontherequestmessage
∙sendtherequestmessage
∙consumetheresponseandassociatetheinboundmessagetotherequestusingtheJMSCorrelationID(asyoumaybeperformingmanyconcurrentrequest/responses).
⏹消息群发
静态群发
Thefollowingexampleshowshowtoroutearequestfromaninputqueue:
aendpointtoastaticlistofdestinations
动态群发
UsuallyoneofthemainreasonsforusingtheRecipientList
patternisthatthelistofrecipientsisdynamicandcalculatedatruntime.ThefollowingexampledemonstrateshowtocreateadynamicrecipientlistusinganExpression(whichinthiscaseitextractsanamedheadervaluedynamically)tocalculatethelistofendpointswhichareeitheroftypeEndpoint
orareconvertedtoaStringandthenresolvedusingtheendpointURIs.
).recipientList(header("
foo"
));
TheaboveassumesthattheheadercontainsalistofendpointURIs.Thefollowingtakesasinglestringheaderandtokenizesit
direct:
).recipientList(
header("
recipientListHeader"
).tokenize("
"
Iteratablevalue
Thedynamiclistofrecipientsthataredefinedintheheadermustbeiteratablesuchas:
▪java.util.Collection
▪java.util.Iterator
▪arrays
▪org.w3c.dom.NodeList
▪Camel1.5.1:
asingleStringwithvaluesseparatedwithcomma
▪anyothertypewillberegardedasasinglevalue
UsingtheSpringXMLExtensions
<
camelContextid="
camel"
xmlns="
http:
//camel.apache.org/schema/spring"
>
<
route>
fromuri="
/>
recipientList>
xpath>
$foo<
/xpath>
/recipientList>
/route>
/camelContext>
Forfurtherexamplesofthispatterninuseyoucouldlookatoneofthejunittestcase
UsingdelimiterinSpringXML
AvailableasofCamel1.5.1
InSpringDSLyoucansetthedelimiterattributeforsettingadelimitertobeusediftheheadervalueisasingleStringwithmultipleseparatedendpoints.
/>
!
--usecommaasadelimiterforStringbasedvalues-->
recipientListdelimiter="
header>
myHeader<
/header>
SoifmyHeadercontainsaStringwiththevalue"
queue:
foo,activemq:
topic:
hello,log:
bar"
thenCamelwillsplittheStringusingthedelimitergivenintheXMLthatwascomma,resultinginto3endpointstosendto.YoucanusespacesbetweentheendpointsasCamelwilltrimthevaluewhenitlookuptheendpointtosendto.
Note:
InJavaDSLyouusethetokenizertoarchivethesame.TherouteaboveinJavaDSL:
myHeader"
消息路由
TheMessageRouter
fromtheEIPpatternsallowsyoutoconsumefromaninputdestination,evaluatesomepredicatethenchoosetherightoutputdestination.
aendpointtoeitherqueue:
b,queue:
corqueue:
ddependingontheevaluationofvariousPredicateexpressions
).choice().when(header("
).isEqualTo("
)).to("
)
.when(header("
cheese"
).otherwise().to("
Choicewithoutotherwise
Ifyouuseachoicewithoutaddinganotherwise,anyunmatchedexchangeswillbedroppedbydefault.Ifyouprefertohaveanexceptionforanunmatchedexchange,youcanaddathrowFaulttotheotherwise.
....otherwise().throwFault("
Nomatchingwhenclausefoundonchoiceblock"
动态路由
publicclassRouterBean2{
@RecipientList
publicStringroute(@Header("
customerID"
)StringcustIDStringbody){
if(custID==null)returnnull;
return"
Customers.Orders."
+custID;
}
publicclassMyRouteBuilderextendsRouteBuilder{
protectedvoidconfigure(){
Orders.Incoming"
).beanRef("
myRouterBean"
route"
⏹可靠传输
CamelsupportstheGuaranteedDelivery
fromtheEIPpatternsusingthefollowingcomponents
∙Fileforusingfilesystemsasapersistentstoreofmessages
∙JMSwhenusingpersistentdelivery(thedefault)forworkingwithJMSQueuesandTopicsforhighperformance,clusteringandloadbalancing
∙JPAforusingadatabaseasapersistencelayer
⏹消息转换
SomeQueue"
beanRef("
myTransformerBean"
myMethodName"
AnotherQueue"
Wherethe"
wouldbedefinedinaSpringXMLfileordefinedinJNDIetc.YoucanomitthemethodnameparameterfrombeanRef()andtheBeanIntegrationwilltrytodeducethemethodtoinvokefromthemessageexchange.
oryoucanaddyourownexplicitProcessortodothetransformation
start"
).process(newProcessor(){
publicvoidprocess(Exchangeexchange){
Messagein=exchange.getIn();
in.setBody(in.getBody(String.class)+"
World!
"
}).to("
mock:
result"
oryoucanusetheDSLtoexplicitlyconfigurethetransformation
).transform(body().append("
⏹消息过滤
ThefollowingexampleshowshowtocreateaMessageFilterrouteconsumingmessagesfromanendpointcalledqueue:
awhichifthePredicateistruewillbedispatchedtoqueue:
b
).filter(header("
YoucanofcourseusemanydifferentPredicatelanguagessuchasXPath,XQuery,SQLorvariousScriptingLanguages.HereisanXPathexample
filter().xpath("
/person[@name='
James'
]"
filter>
$foo='
bar'
touri="
/filter>
⏹消
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ACTIVEMQ 研究 分析