




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
附錄A外文翻譯—原文部分Gutierrez,ProSpringBoot2,/10.1007/978-1-4842-3676-5_11SpringIntegrationandSpringCloudStreamwithSpringBootInthischapter,IshowyouoneofthebestintegrationframeworksfortheJavacommunity:theSpringIntegrationproject,whichisbasedontheSpringFramework.IalsopresenttheSpringCloudStream,whichisbasedonSpringIntegration.Itcreatesrobustandscalableevent-drivenmicroservicesconnectedtosharedmessagingsystems—alldonewithSpringBoot.Ifwetakealookatsoftwaredevelopmentandbusinessneeds,asadeveloperoranarchitect,wearealwayslookingathowtointegratecomponentsandsystems,eitherinternalorexternaltoourarchitecture,andprobewhatisfullyfunctional,highlyavailable,andeasytomaintainandenhance.Thefollowingarethemainusescasesthatdevelopersorarchitectstypicallyface.?\ Creatingasystemthatdoesareliablefiletransferorfileanalysis.Mostoftheapplicationsoutthereneedtoreadinformationfromafileandthenprocessit,soweneedtocreaterobustfilesystemsthatsaveandreaddatabutalsoshareanddealwiththesizeofthefiles.?\ Theabilitytousedatainasharedenvironmentwheremultipleclients(systemsorusers)needaccesstothesamedatabaseorthesametableanddooperationsanddealwithinconsistency,duplication,andmore.?\ Remoteaccesstodifferentsystems,fromexecutingremoteprocedures,tosendingalotofinformation.Wealwayswanttohavethisinrealtimeandinanasynchronousway.Theabilitytogetaresponseasfastaspossiblewithoutforgettingthattheremotesystemalwaysneedstobereachable;inotherwords,havethefaulttoleranceandhighavailabilityrequired.?\ Messaging—fromabasicinternalcalltobillionsofmessagespersecondtoremotebrokers.Normally,wedomessaginginanasynchronousway,soweneedtodealwithconcurrency,multithreading,speed(networklatency),highavailability,faulttolerance,andsoforth.Howcanwesolveorimplementalloftheseusecases?Almost15yearsago,softwareengineersGregorHohpeandBobbyWoolfwroteEnterpriseIntegrationPatterns:Designing,BuildingandDeployingMessagingSolutions(Addison-Wesley,2003).ThisbookexposesallthemessagingpatternsneededtosolvetheusecasesthatImentioned.Itgivesabetterunderstandingonhowsystemsinterconnectandwork,andhowyoucancreatearobustintegrationsystemwithapplicationarchitecture,object-orienteddesign,andmessage-oriented.Inthefollowingsections,I’llshowyousomeofthesepatternsusingtheSpringIntegrationprojectfromtheSpringFramework.SpringIntegrationPrimerSpringIntegrationisasimplemodelforimplementingenterpriseintegrationsolutions.Itfacilitatestheasynchronousandmessage-drivenwithinaSpringBootapplication.Itimplementsalltheenterpriseintegrationpatternsforcreatingenterprise,robust,andportableintegrationsolutions.TheSpringIntegrationprojectoffersawaytohavecomponentsthatarelooselycoupledformodularityandtestability.Ithelpstoenforcetheseparationofconcernsbetweenyourbusinessandintegrationlogic.SpringIntegrationexposesthefollowingmaincomponents.?\ Message.ThisisagenericwrapperforanyJavaobject.Itconsistsofheadersandapayload.TheheadersnormallyhaveimportantinformationlikeID,timestamp,correlationID,andreturnaddress;andofcourse,youcanaddyourown.Thepayloadcanbeanytypeofdata,fromanarrayofbytestocustomobjects.Youcanfinditsdefinitioninthespring-messagingmoduleintheorg.springframework.messagingpackage.publicinterfaceMessage<T>{TgetPayload();MessageHeadersgetHeaders();}Asyoucansee,there’snothingfancyinthedefinition.?\ Messagechannel.Pipesandfiltersarchitecture,verysimilartothecommandyouuseinaUNIXsystem.Touseit,youneedtohaveproducersandconsumers;theproducersendsthemessagetothemessagechannelandaconsumerreceivesit(seeFigure11-1).Figure11-1.?MessagechannelThismessagechannelfollowsmessagingpatterns,suchasthePoint-to-PointandPublish/Subscribemodels.SpringIntegrationoffersseveralmessagechannels,likepollablechannels(thatallowsyoutohavebufferingmessageswithinaqueue)orsubscribablechannelsfortheconsumers.?\ Messageendpoint.Afilterthatconnectstheapplicationcodetothemessagingframework.MostoftheseendpointsarepartoftheEnterpriseIntegrationPatternsimplementations.?\ Filter.Amessagefilterdetermineswhenamessageshouldbepassedtotheoutputchannel.?\ Transformer.Amessagetransformermodifiesthecontentorstructureofamessageandpassesittotheoutputchannel.?\ Router.Amessagerouterdecideswhattodoandwheretosendthemessagebasedonrules.Theserulescanbeintheheadersorinthesamepayload.Thismessagerouterhasmanypatternsthatcanbeapplied.I’llshowyouatleastoneofthem.?\ Splitter.Amessagesplitteracceptsamessage(inputchannel),anditsplitsandreturnsnewmultiplemessages(outputchannel).?\ Serviceactivator.Thisisanendpointthatactsasaservicebyreceivingamessage(inputchannel)andprocessesit.Itcaneitherendtheflowoftheintegrationoritcanreturnthesamemessageoranentirelynewone(outputchannel).?\ Aggregator.Thismessageendpointreceivedmultiplemessages(inputchannel);itcombinestheminanewsinglemessage(baseonareleasestrategy)andsendsitout(outputchannel).?\ Channeladapters.Thisisaparticularendpointthatconnectsamessagechanneltoothersystemsortransports.SpringIntegrationoffersinboundoroutboundadapters.Wherearesponseisrequired,itoffersagatewayadapter.Youseethatthesearethemostcommonlyused.Why?IfyoursolutionislookingtoconnecttoRabbitMQ,JMS,FTP,aFileSystem,HTTPoranyothertechnology,SpringIntegrationhastheadaptertoconnecttoitwithoutyoucodinganyclient.ItwouldtakeawholenewbooktowriteaboutSpringIntegrationandmessagepatterns,messagingchannels,adapters,andmore,butifyouareinterestinginthistechnology,IrecommendProSpringIntegrationbyDr.MarkLui(Apress,2011).Inthenextsection,I’llshowyousomeofthecomponentsandpatterns,whichareenoughtogetyoustarted.ProgrammingSpringIntegrationWithSpringIntegration,thereareseveralwaystoconfigureallthecomponents(message,messagechannelandmessageendpoints):XML,JavaConfigclasses,annotations,andthenewIntegrationDSL.ToDoAppwithSpringIntegrationLet’sstartwiththewell-knownToDoAppanduseSpringIntegrationrightaway.Youcanstartfromscratchoryoucanfollowalonginthenextsectionstolearnwhatyouneedtodo.Ifyouarestartingfromscratch,thenyoucangotoSpringInitializr(https://start.spring.io)andaddthefollowingvaluestothefields.?\ Group:com.apress.todo?\ Artifact:todo-integration?\ Name:todo-integration?\ PackageName:com.apress.todo?\ Dependencies:SpringIntegration,LombokYoucanselecteitherMavenorGradleastheprojecttype.ThenyoucanpresstheGenerateProjectbutton,whichdownloadsaZIPfile.UncompressitandimporttheprojectinyourfavoriteIDE(seeFigure11-2).Figure11-2.?SpringInitializrAsyoucanseefromthedependencies,wearenowusingSpringIntegration.YoucanreuseorcopytheToDoclass(seeListing11-1).Listing11-1.?com.apress.todo.domain.ToDo.javapackagecom.apress.todo.domain;importlombok.Data;importjava.time.LocalDateTime;importjava.util.UUID;@DatapublicclassToDo{privateStringid;privateStringdescription;privateLocalDateTimecreated;privateLocalDateTimemodified;privatebooleancompleted;publicToDo(){this.id=UUID.randomUUID().toString();this.created=LocalDateTime.now();this.modified=LocalDateTime.now();}publicToDo(Stringdescription){this();this.description=description;}publicToDo(Stringdescription,booleancompleted){this(description);pleted=completed;}}Listing11-1showsyouwell-knownToDoclass.There’snothingnewaboutit.Next,let’screateaToDoIntegrationclassthathasthefirstSpringIntegrationflowusingDSL(seeListing11-2).Listing11-2.?egration.ToDoIntegration.javapackageegration;importcom.apress.todo.domain.ToDo;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importegration.channel.DirectChannel;importegration.config.EnableIntegration;importegration.dsl.IntegrationFlow;importegration.dsl.IntegrationFlows;importegration.dsl.channel.MessageChannels;@EnableIntegration@ConfigurationpublicclassToDoIntegration{@BeanpublicDirectChannelinput(){returnMessageChannels.direct().get();}@BeanpublicIntegrationFlowsimpleFlow(){returnIntegrationFlows.from(input()).filter(ToDo.class,ToDo::isCompleted).transform(ToDo.class,toDo->toDo.getDescription().toUpperCase()).handle(System.out::println).get();}}Listing11-2showsabasicexample.Thisexamplereceivesamessagefromtheinputchannel(aToDoinstance),filtersthismessageifonlytheToDoiscompleted,andthentransformsthemessagebyuppercasingthedescriptionandhandlesitbyprintingitontheconsole.Allofthisiscalledanintegrationflow.Butlet’stakeadeeperlookinside.?\ IntegrationFlow.ExposestheDSLasabean(itisrequiredtohavea@Beanannotation).ThisclassisafactoryfortheIntegrationFlowBuilderanddefinestheflowoftheintegration.Itregistersallthecomponents,suchasmessagechannels,endpoints,andsoforth.?\ IntegrationFlows.ThisclassexposesafluentAPIthathelpsbuildingtheintegrationflow.It’seasytoincorporateendpointssuchastransform,filter,handle,split,aggregate,route,bridge.Withtheseendpoints,youcanuseanyJava8(andabove)lambdaexpressionsasanargument.?\ from.Thisisanoverloadedmethodwhereyounormallypassthemessagesource;inthiscase,wearecallingtheinputmethodthatreturnsaDirectChannelinstancethroughtheMessageChannelsfluentAPI.?\ filter.ThisoverloadedmethodpopulatesMessageFilter.TheMessageFilterdelegatestoaMessageSelectorthatsendsthemessagetothefilter’soutputchanneliftheselectoracceptsthemessage.?\ transform.Thismethodcanreceivealambdaexpression,butactuallyreceivesGenericTransformer<S,T>,whereSisthesourceandtheTisthetypethatitisconvertedto.Herewecanuseout-of-the-boxtransformers,likeObjectToJsonTransformer,FileToStringTransformer,andsoforth.Inthisexample,wearetheclasstype(ToDo)andalambdaisexecuted;inthiscase,gettingtheToDo’sdescriptionandtransformingittouppercase.?\ handle.ThisisanoverloadedmethodthatpopulatesServiceActivatingHandler.Normally,wecanuseaPOJOthatallowsyoutoreceivethemessageandeitherreturnanewmessageortriggeranothercall.Thisisausefulendpointthatwearegoingtoseeinthischapterandinthenextoneasaserviceactivatorendpoint.?\ @EnableIntegration.HereweareusinganewannotationthatsetsupalltheSpringIntegrationbeansthatweneedforourflow.Thisannotationregistersdifferentbeans,likeerrorChannel,LoggingHandler,taskScheduler,andmore.Thesebeanscomplementourflowinanintegrationsolution.ThisannotationisnecessarywhenusingJavaconfigurations,annotations,andDSLinaSpringBootapplication.Don’tworrytoomuchifthislooksdifferentfromwhatyouhaveprobablydoneinthepastwithintegrationsolutions.YouwillgetmorecomfortablewithalltheexamplesthatIshowyounext,anditgetseveneasier.Next,let’screatetheToDoConfigclassinwhichaToDoissentthroughtheinputchannel(seeListing11-3).Listing11-3.?com.apress.todo.config.ToDoConfig.javapackagecom.apress.todo.config;importcom.apress.todo.domain.ToDo;importorg.springframework.boot.ApplicationRunner;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.messaging.MessageChannel;importorg.springframework.messaging.support.MessageBuilder;@ConfigurationpublicclassToDoConfig{@BeanpublicApplicationRunnerrunner(MessageChannelinput){returnargs->{input.send(MessageBuilder.withPayload(newToDo("buymilktoday",true)).build());};}}Listing11-3showstheApplicationRunnerbean,whereitisexecutedwhentheapplicationstarts(seethattheMessageChannelisinjected—theonedeclaredintheToDoIntegrationclass).ThismethodisusingaMessageBuilderclassthatoffersafluentAPIthatcreatesmessages.Inthiscase,theclassisusingthewithPayloadmethodthatcreatesanewToDoinstance,markedascompleted.Nowit’stimetorunourapplication.Ifyourunit,youshouldseesomethingsimilartothefollowingoutput....INFO39319-[main]o.s.i.e.EventDrivenConsumer:startedsimpleF.egration.config.ConsumerEndpointFactoryBean#2INFO39319-[main]c.a.todo.TodoIntegrationApplication:StartedTodoIntegrationApplicationin0.998seconds(JVMrunningfor1.422)GenericMessage[payload=BUYMILKTODAY,headers={id=c245b7a3-3191-641b--7ad8-1f6eb950f62e,timestamp=1535772540543}]...Rememberthatamessageisaboutheadersandpayload,whichiswhywegettheGenericMessageclasswithapayloadwherethefinalmessageis“BUYMILKTODAY”andheadersthatincludetheIDandthetimestamp.Thisistheresultofapplyingafilterandtransformingthemessage.
附錄B外文翻譯—譯文部分Spring集成帶有SpringBoot的Spring流在本章中,我向大家展示了java社區(qū)最好的集成框架之一:基于Spring框架的Spring集成項(xiàng)目。我還介紹了基于Spring集成的Spring流。它創(chuàng)建了連接到共享消息系統(tǒng)的強(qiáng)大和可擴(kuò)展的事件驅(qū)動的微服務(wù)——所有這些都是用SpringBoot完成的。如果我們看看軟件開發(fā)和業(yè)務(wù)需求,作為一個開發(fā)者或建筑師,我們總是在考慮如何集成組件和系統(tǒng),無論是內(nèi)部的還是外部的,我們的架構(gòu),并探索什么是完全功能的,高度可用的,易于維護(hù)和增強(qiáng)。以下是開發(fā)者或架構(gòu)師通常會面對的主要用例。?創(chuàng)建一個能夠進(jìn)行可靠的文件傳輸或文件分析的系統(tǒng)。大部分的應(yīng)用程序都需要從文件,然后處理它,所以我們需要創(chuàng)建健壯的文件系統(tǒng)保存和讀取數(shù)據(jù),并共享和處理文件的大小。*在多個共享環(huán)境中使用數(shù)據(jù)的能力客戶(系統(tǒng)或用戶)需要訪問同一數(shù)據(jù)庫或做同樣的操作和處理不一致的問題,重復(fù),還有更多。*從執(zhí)行遠(yuǎn)程訪問到不同系統(tǒng)程序,發(fā)送大量信息。我們一直想擁有這在實(shí)時和異步的方式。能夠在不忘記遠(yuǎn)程系統(tǒng)總是需要可到達(dá)的情況下盡快得到響應(yīng);換句話說,具有所需的容錯性和高可用性。?短信——從基本的內(nèi)部通話到每秒數(shù)十億條短信,再到遠(yuǎn)程經(jīng)紀(jì)人。通常,我們用異步方式進(jìn)行消息傳遞,因此我們需要處理并發(fā)、多線程、速度(網(wǎng)絡(luò)延遲)、高可用性、容錯性等問題。我們?nèi)绾谓鉀Q或?qū)崿F(xiàn)所有這些用例?大約15年前,軟件工程師GregorHohpe和BobbyWoolf撰寫了《企業(yè)集成模式:設(shè)計(jì)、構(gòu)建和部署消息傳遞解決方案》(addison-wesley,2003年)。這本書公開了解決我提到的用例所需的所有消息模式。它可以更好地理解系統(tǒng)如何相互連接和工作,以及如何創(chuàng)建一個具有應(yīng)用程序體系結(jié)構(gòu)、面向?qū)ο笤O(shè)計(jì)和面向消息的健壯集成系統(tǒng)。在下面的章節(jié)中,我將使用Spring框架中的Spring集成項(xiàng)目向您展示其中的一些模式。Spring集成底漆Spring集成是實(shí)現(xiàn)企業(yè)集成解決方案的一個簡單模型。它方便了Spring啟動應(yīng)用程序中的異步和消息驅(qū)動。它實(shí)現(xiàn)了創(chuàng)建企業(yè)、健壯和可移植的集成解決方案的所有企業(yè)集成模式。該Spring集成項(xiàng)目提供了一種方法,使組件松散耦合模塊化和可測試性。它有助于在業(yè)務(wù)和集成邏輯之間強(qiáng)制分離關(guān)注點(diǎn)。Spring集成公開了以下主要組件。?信息。這是任何java對象的通用包裝器。它由頭和有效載荷組成。標(biāo)頭通常有重要的信息,如id、時間戳、相關(guān)id和返回地址;當(dāng)然,您可以添加自己的信息。有效負(fù)載可以是任何類型的數(shù)據(jù),從字節(jié)數(shù)組到自定義對象。您可以在.org中的春季消息模塊中找到它的定義。Spring框架。消息包。publicinterfaceMessage<T>{TgetPayload();MessageHeadersgetHeaders();}正如你所看到的,沒有什么花哨的定義。?留言頻道。管道和過濾器架構(gòu),非常類似于在unix系統(tǒng)中使用的命令。要使用它,你需要有生產(chǎn)者和消費(fèi)者;生產(chǎn)者將消息發(fā)送到消息通道,消費(fèi)者接收它(見下圖)。此消息通道遵循消息傳遞模式,如點(diǎn)對點(diǎn)和發(fā)布/訂閱模型。Spring集成為消費(fèi)者提供了一些消息通道,如可傳播的通道(允許您在隊(duì)列中擁有緩沖消息)或可訂閱的通道。?信息終點(diǎn)。將應(yīng)用程序代碼連接到消息傳遞框架的篩選器。這些端點(diǎn)大多是企業(yè)集成模式的實(shí)現(xiàn)。?\過濾。消息篩選器決定何時將消息傳遞到輸出通道。?變壓器。消息轉(zhuǎn)換器修改消息的內(nèi)容或結(jié)構(gòu)并將其傳遞到輸出通道。?路由器。消息路由器根據(jù)規(guī)則決定做什么和向何處發(fā)送消息。這些規(guī)則可以在標(biāo)頭中,也可以在同一個有效載荷中。這個消息路由器有很多模式可以應(yīng)用。我至少會給你看其中一個。拆分器。消息拆分器接受消息(輸入通道),然后拆分并返回新的多個消息(輸出通道)。?服務(wù)激活器。這是一個端點(diǎn),通過接收消息(輸入通道)并處理它來充當(dāng)服務(wù)。它既可以結(jié)束集成的流,也可以返回相同的消息或一個全新的消息(輸出通道)?!聚合器。此消息端點(diǎn)接收到多個消息(輸入通道);它將它們合并到一個新的單一消息(基于發(fā)布策略)中并發(fā)送出去(輸出通道)。?\通道適配器。這是一個特定的端點(diǎn),將消息通道連接到其他系統(tǒng)或傳輸。Spring集成提供入站或出站適配器。在需要響應(yīng)的情況下,它提供網(wǎng)關(guān)適配器。你看,這些是最常用的。為什么?如果您的解決方案是要連接到rabbitmq、jms、ftp、一個文件系統(tǒng)、http或任何其他技術(shù),那么Spring集成就可以在不對任何客戶端進(jìn)行編碼的情況下連接到它。如果你對這項(xiàng)技術(shù)感興趣,我建議MarkLui博士(apress,2011年)寫一本關(guān)于Spring集成和消息模式、消息通道、適配器等等的新書。在下一節(jié)中,我將向您展示一些組件和模式,這些組件和模式足以讓您開始。編程Spring集成有了Spring集成,有幾種方法來配置所有的組件(消息、消息通道和消息端點(diǎn)):xml、javaconfig類、注釋和新的集成dsl。帶有Spring集成的todo應(yīng)用程序讓我們從著名的todo應(yīng)用程序開始,立即使用Spring集成。你可以從頭開始,也可以在接下來的章節(jié)里學(xué)習(xí)你需要做的事情。如果你是從零開始,那么你可以去Spring初始化(https://start)。spring.io),并在字段中添加以下值。?小組討論?藝術(shù)品:整合?名字:整合?包裝名稱:來吧?依賴:Spring整合,龍目您可以選擇maven或gladle作為項(xiàng)目類型。然后您可以按下生成的項(xiàng)目按鈕,該按鈕可以下載zip文件。解壓縮并導(dǎo)入您最愛的代碼中的項(xiàng)目(見下圖)。從依賴關(guān)系中可以看出,我們現(xiàn)在使用的是Spring積分。您可以重用或復(fù)制托多類(見清單11-1)。清單11-1.com.apress.todo.domain.ToDo.javapackagecom.apress.todo.domain;importlombok.Data;importjava.time.LocalDateTime;importjava.util.UUID;@DatapublicclassToDo{privateStringid;privateStringdescription;privateLocalDateTimecreated;privateLocalDateTimemodified;privatebooleancompleted;publicToDo(){this.id=UUID.randomUUID().toString();this.created=LocalDateTime.now();this.modified=LocalDateTime.now();}publicToDo(Stringdescription){this();this.description=description;}publicToDo(Stringdescription,booleancompleted){this(description);pleted=completed;}}清單11-1顯示你的知名ToDoclass。這沒什么新鮮的。接下來,讓我們創(chuàng)建一個有第一個使用dsl的Spring集成流的Todo集成類(參見清單11-2)。清單11-2.egration.ToDoIntegration.javapackageegration;importcom.apress.todo.domain.ToDo;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importegration.channel.DirectChannel;importegration.config.EnableIntegration;importegration.dsl.IntegrationFlow;importegration.dsl.IntegrationFlows;importegration.dsl.channel.MessageChannels;@EnableIntegration@ConfigurationpublicclassToDoIntegration{@BeanpublicDirectChannelinput(){returnMessageChannels.direct().get();}@BeanpublicIntegrationFlowsimpleFlow(){returnIntegrationFlows.from(input()).filter(ToDo.class,ToDo::isCompleted).transform(ToDo.class,toDo->toDo.getDescription().toUpperCase()).handle(System.out::println).get();}}清單11-2是一個基本例子。此示例接收來自輸入通道(一個todo實(shí)例)的消息,如果僅完成該todo,則篩選此消息,然后通過提升描述來轉(zhuǎn)換該消息,并通過在控制臺上打印來處理該消息。所有這些都被稱為集
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年白山貨運(yùn)從業(yè)資格證模擬考試系統(tǒng)
- 2025年江西貨車從業(yè)資格考試試題及答案
- 2025年永州考貨運(yùn)資格證模擬試題
- 自動化設(shè)備安裝與維護(hù)技術(shù)標(biāo)準(zhǔn)
- 農(nóng)業(yè)機(jī)械化技術(shù)操作手冊
- 2025年貴陽貨運(yùn)從業(yè)資格證報(bào)考
- PLC控制系統(tǒng)安裝與調(diào)試手冊
- 場地租賃安全協(xié)議書
- 購買車位合同
- 游子吟:親情的主題解讀教案
- 2025年黑龍江職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫必考題
- 專利共有合同范例
- 《ABO血型鑒定》課件
- 蘇教版五年級下冊數(shù)學(xué)計(jì)算題大全1200道帶答案
- 計(jì)算機(jī)行業(yè)人工智能系列深度報(bào)告:deepseek研究框架-國海證券-20250214
- JJF1033-2023計(jì)量標(biāo)準(zhǔn)考核規(guī)范
- 《基于舞弊風(fēng)險(xiǎn)因子的輝山乳業(yè)公司財(cái)務(wù)舞弊案例探析》15000字(論文)
- 2025年山西省國有資本運(yùn)營有限公司招聘筆試參考題庫含答案解析
- 2025年湖南生物機(jī)電職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年常考版參考題庫含答案解析
- DB1331T 102-2025雄安新區(qū)應(yīng)急物資儲備庫建設(shè)規(guī)范
- 北京市豐臺區(qū)2024-2025學(xué)年九年級上學(xué)期期末道德與法治試題(含答案)
評論
0/150
提交評論