新时代里咨询对我们的影响MassagingthePony

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

MassagingthePony:MessageQueuesandYouShawnRiderPBSEducationDjangoCon2010://://://://•RepeatingTaskscanreplaceCronjobs•KeepallyourcodeinyourprojectAvailableMQSolutionsTherearemanysolutionsoutthere.Tonameafewofthem:•RabbitMQ•AmazonSimpleQueueSystem•ApacheMQ•Gearman•OpenAMQ•Peafowl•Q4M•Starling•SunJavaSystemMessageQueueMessageQueueProtocols•AMQP:AdvancedMessageQueuingProtocol•JMS:JavaMessagingService•STOMP:StreamingTextOrientedMessagingProtocolCriteriaforBrokerSelectionThefollowingcriteriawereimportanttousinselectingasolution.Youmayhavesomedifferentneeds.•Handlingexceptionsandrecovery•Lowlevelofrequiredmaintenance•Easeofdeployment•Persistentqueuing•Communitysupport•Whatlanguageisitwrittenin?Howcompatibleisthatwithourcurrentsystems?•ClustersupportFailsafeMQBrokers•Mustbeabletosurviveaserverfailure.•UponrestartingtheMQBroker,processingshouldresumefromthelastun-processedmessagesinqueuesQueueDurabilityTheMessagesQueueBrokermustbeabletoreconstructthequeueswhenitisrestarted.(taskstobecompleted)mustpersistbetweenshutdownsandrestartsofMQServerOurChoice•Celery(aDjangotaskmanagementapp)•Carrot(Djangomiddleware)•PyAMQP(Pythonmodule)•RabbitMQ(MQBrokersoftware)TheProductionSystemWebappDatabaseWorkerServer(s)CeleryRabbitMQMQinDevelopmentEnvironsItisimportanttobeabletodevelopMessageQueuetasksinDjangowithoutbeingconcernedaboutrunningthebrokerprocess,queuesetup,persistenceetc.MQinDevelopmentEnvirons•Carrotcanbesetuptousedifferentqueuingbackendfordevelopmentpurposes•GhettoQprovidesdatabasebackendforcarrotwhereadatabaseservesasthequeuestorage•ThebrokerisasimpleDjangoapplicationthatmonitorsthequeueinDB•Inefficient,thereforeonlysuitablefordevelopmentenvironmentsCARROT_BACKEND=‘qhettoq.taproot.Database’EaseafutureMQimplementationIsolatefunctionalityintoreusablecomponents.RecycleExistingCodeDjango,HTTPRequests&MQ•MostfunctionalitiesprovidedthroughDjangoapplicationsaretightlycoupledwithHTTPrequestse.g.formdataprocessing•Inordertoasynchronouslyexecuteatask,Celery(anytaskmanagementplatform)mustserialize&storeparameters•HTTPrequestsareusuallylargeandnoteasilyserializable.e.g.WSGIrequestsThePickleableHTTPRequestObjectUsingPickleableHttpRequestifrequest.GET.get(‘download’):try:result=EnrollmentCSVExportTask.delay(PickleableHttpRequest(request,attributes=\[‘user’,‘admin_current_organization’]))MakingMessageQueueTasksItisfastandeasytoaddadecoratortospecificfunctionstocreateMessageQueuetasks.fromcelery.decoratorsimporttask@taskdefadd(x,y):returnx+yExplicitlyInheritfromCelery’sTaskObjectThenWhat?SomeMessageQueuetaskscancompletewithnonotificationrequired.Forothertasks:•Notifybyemail•UseanAJAXlistenertonotifyusers•SomeothermessagingInReview•ChooseyourMQsolutionwisely•Setuparobustsystem•Leverageyourexistingcode•Replacetroublespotsastheycomeup•Profit!MessageQueuesMakeLifeBetter

1 / 27
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功