当前位置: 首页 > Web前端 > JavaScript

CloudEvents是什么,它的用途是什么?

时间:2023-03-26 20:22:35 JavaScript

鑳屸€嬧€嬫櫙鐩墠锛屽嚑涔庢墍鏈変富娴佸叕鏈変簯閮芥帴鍏ヤ簡CloudEvents瑙勮寖銆備粠澶у鏁扮敤鎴风殑瑙掑害鏉ョ湅鈥斺€旂粺涓€瑙勮寖瀵逛簬鍚庢湡鎺ュ叆浠讳綍浜戦兘鏈夊緢澶х殑甯姪锛屽挨鍏舵槸鍦╯erverless灞傞潰銆傛儏鍐甸潪甯哥浉浼笺€傞偅涔圕loudEvents瑙e喅浜嗕粈涔堥棶棰橈細鏍囧噯鍖栭泦鎴愭彁楂樹簡鍙Щ妞嶆€ф洿鍙嬪ソ鐨勫紑鍙戝拰娴嬭瘯鏇村ソ鐨勫畨鍏ㄧ瓥鐣ワ紝鏇村鏄撶殑浜嬩欢璺熻釜锛屾洿鐩存帴鐨勪簨浠跺叧鑱擡vent(s)閭d箞浠€涔堟槸浜嬩欢锛熷綋缁勪欢鎴栫被涔嬮棿鐨勫唴鑱氬姏楂樻椂锛屽畠浠殑鑰﹀悎搴﹀氨搴旇浣庛€傚亣璁炬湁涓€涓満鏅紝涓や釜缁勪欢鐩镐簰璋冪敤锛欰缁勪欢闇€瑕佽皟鐢˙缁勪欢鍐呴儴鐨勯€昏緫銆備粠閫昏緫涓婅锛孉缁勪欢闇€瑕佽皟鐢˙缁勪欢鐨勬柟娉曟潵瀹炵幇杩欎釜鍦烘櫙锛屼絾鍓嶆彁鏄疉缁勪欢蹇呴』鐭ラ亾B缁勪欢鏄瓨鍦ㄧ殑锛屼篃灏辨槸璇粹€斺€斿畠浠箣闂存湁渚濊禆鍏崇郴锛屼篃灏辨槸鑰﹀悎鍏崇郴銆傚綋瀛樺湪杩欐牱鐨勫叧绯绘椂锛岀郴缁熷湪缁勪欢鏁伴噺澧炲姞鍚庡皢闅句互缁存姢锛屽洜姝ゆ垜浠渶瑕佷竴绉嶆灦鏋勬潵瑙e喅杩欎釜闂锛屽嵆锛氫簨浠堕┍鍔紙Event-drivenArchitecture锛孍DA锛夈€傚彲浠ヨ繖鏍峰仛锛氬綋A缁勪欢鎵ц鐨勯€昏緫闇€瑕佽Е鍙態缁勪欢鐨勯€昏緫鏃讹紝涓嶉渶瑕佺洿鎺ヨ皟鐢紝鑰屾槸灏嗕簨浠跺彂閫佺粰dispatcher銆侭缁勪欢鍙渶瑕佺洃鍚皟搴︿簨浠讹紝鍦ㄤ簨浠惰Е鍙戞椂鎵ц鎿嶄綔鍗冲彲銆傚湪杩欑鎯呭喌涓嬶紝浜嬩欢鏄簲鐢ㄧ▼搴忕殑涓€閮ㄥ垎锛屽瓨鍦ㄤ簬澶氫釜缁勪欢涔嬮棿骞舵墽琛岀粍浠堕棿閫氫俊銆侰loudEvent(s)缁撳悎浜咵vent(s)涓彁鍒扮殑浜嬩欢鐨勫畾涔夛紝浜戞湇鍔′笂鐨勪簨浠跺湪鏈嶅姟鍣ㄤ箣闂磋繘琛岄€氫俊锛氫竴涓郴缁熺殑鐘舵€佹敼鍙樺鑷村彟涓€涓郴缁熺殑浠g爜瑙﹀彂鎵ц銆傚啀鍏蜂綋涓€鐐癸細褰撲竴涓簨浠舵簮鎺ユ敹鍒颁竴涓俊鍙凤紙HTTP鎴朢PC锛夋椂锛屽畠浼氭牴鎹竴瀹氱殑瑙勮寖璋冨害涓€涓暟鎹簨浠讹紝鐒跺悗瑙﹀彂涓€涓娇鐢ㄨ浜嬩欢瑙勮寖鐨勬柟娉曪紙鍑芥暟锛夈€傪煈嗕簨浠舵簮灏辨槸鎴戜滑鐞嗚В鐨勶細鎵樼鏈嶅姟锛岃€屾柟娉曪紙鍑芥暟锛夋寚鐨勬槸Serverless鍑芥暟銆備紶杈揅loudEvents鏀寔閫氳繃鍚勭鍗忚浼犺緭锛屽凡缁忔敮鎸佺殑鏈夛細鍚勭琛屼笟鏍囧噯鍗忚锛堝HTTP銆丄MQP銆丮QTT銆丼MTP锛夊紑婧愬崗璁紙濡侹afka銆丯ATS锛夊钩鍙?鍘傚晢涓撴湁鍗忚锛圓WSKinesis銆丄zure锛変簨浠剁綉鏍兼牸寮忓皢鏈嶅姟鏀惧湪浜戠骞跺皢浜嬩欢浼犳挱鍒板叾鏈嶅姟涓紝杩欐槸涓€浠跺ソ浜嬨€備絾鏄垜浠厛鏉ョ湅鐪嬪競鍦轰唤棰濆墠涓夌殑浜戞湇鍔″晢璁捐鐨凟vent-schema锛欰mazonAWS锛堣繕娌℃湁鎺ュ叆CloudEvents锛墈"version":"0","id":"6a7e8feb-b491-4cf7-a9f1-bf3703467718","detail-type":"EC2InstanceState-changeNotification","source":"aws.ec2","account":"111122223333","time":"2017-12-22T18:43:48Z","region":"us-west-1","resources":["arn:aws:ec2:us-west-1:123456789012:instance/i-1234567890abcdef0"],"detail":{"instance-id":"i-1234567890abcdef0","state":"terminated"}}MicrosoftAzure锛屽弬瑙丄zure浜嬩欢缃戞牸浜嬩欢鏋舵瀯{"topic":"/subscriptions/{subscription-id}","subject":"/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.EventGrid/eventSubscriptions/LogicAppdd584bdf-8347-49c9-b9a9-d1f980783501","eventType":"Microsoft.Resources.ResourceWriteSuccess","eventTime":"2017-08-16T03:54:38.2696833Z","id":"25b3b0d0-d79b-44d5-9963-440d4e6a9bba","鏁版嵁鈥滐細{鈥滄巿鏉冣€濓細鈥渰azure_resource_manager_authorizations}鈥濓紝鈥滃0鏄庘€濓細鈥渰azure_resource_manager_claims}鈥濓紝鈥渃orrelationId鈥濓細鈥?4ef1e39-6a82-44b3-abc1-bdeb6ce4d3c6鈥濓紝鈥渉ttpRequest鈥濓細鈥溾€濓紝鈥渞esourceProvider鈥濓細"Microsoft.EventGrid","resourceUri":"/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.EventGrid/eventSubscriptions/LogicAppdd584bdf-8347-49c9-b9a9-d1f980783501","operationName":"Microsoft.EventGrid/eventSubscriptions/write","status":"鎴愬姛","subscriptionId":"{subscription-id}","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47"}}GoogleGCP{"data":{"@type":"types.googleapis.com/google.pubsub.v1.PubsubMessage","attributes":{"foo":"bar"},"messageId":"12345","publishTime":"2017-06-05T12:00:00.000Z","data":"somebase64encodedmessage"},"context":{"eventId":"12345","timestamp":"2017-06-05T12:00:00.000Z","eventTypeId":"google.pubsub.topic.publish","resource":{"name":"projects/myProject/topics/myTopic","service":"pubsub.googleapis.com"}}}杩欎笁涓簯鏈嶅姟鍟嗘彁渚涚殑浜嬩欢鏁版嵁涓嶄竴鑷达紝杩娇寮€鍙戣€呴渶瑕佽嚜瀹氫箟閫傞厤鍣ㄥ疄鐜拌法骞冲彴鐨勭浉鍏虫搷浣溿€備簨瀹炰笂锛岃法骞冲彴浜嬩欢浼犺緭鐨勫満鏅緢甯歌锛屼絾寰€寰€瀛樺湪涓€浜涢棶棰橈細娌℃湁閫氱敤鐨勬暟鎹牸寮忔潵鎻忚堪浜嬩欢娴佺殑鏉ユ簮鍜岀洰鐨勫湴锛屼笉鏄庣‘銆傚彟澶栵紝FaaS鍑芥暟璁$畻鐜板湪宸茬粡寰堟櫘閬嶄簡锛屽湪鏍煎紡涓嶄竴鑷村拰鑰冭檻鎴愭湰鐨勬儏鍐典笅锛屽彲绉绘鎬у嚑涔庝负0馃憞杩欐槸涓€涓€氱敤鐨凜loudEvent浜嬩欢鏁版嵁缁撴瀯锛岃繖閲屼笉鍐嶈禈杩般€倇鈥渟pecversion鈥濓細鈥?.0鈥濓紝鈥渢ype鈥濓細鈥渃om.github.pull_request.opened鈥濓紝鈥渟ource鈥濓細鈥渉ttps://github.com/cloudevents/spec/pull鈥濓紝鈥渟ubject鈥濓細鈥?23鈥?"id":"A234-1234-1234","time":"2018-04-05T17:31:00Z","comexampleextension1":"value","comexampleothervalue":5,"datacontenttype":"text/xml","data":""}鈥斺€旇瑙佹牳蹇冨睘鎬у拰鎵╁睍灞炴€с€傜洰鐨勬牴鎹瓹loudEvents鏈韩锛氬畾涔変簨浠舵牸寮忕殑渚涘簲鍟嗕腑绔嬭鑼冧互閫氱敤鏍煎紡鎻忚堪浜嬩欢鏁版嵁鐨勬爣鍑嗐€傚畠鎻愪緵璺ㄦ湇鍔°€佸钩鍙板拰绯荤粺鐨勪簨浠朵簰鎿嶄綔鎬с€傚湪鏋舵瀯鎻忚堪涓紝鎴戜滑鍙互鐞嗚В涓猴細CloudEvents瀹氫箟浜嗕竴涓熀鏈殑鏁版嵁缁撴瀯锛屽叾涓寘鍚簡蹇呰鐨勫瓧娈靛拰绫诲瀷銆傚紑鍙戣€呭彲浠ュ熀浜庤繖涓暟鎹粨鏋勬潵鎵╁睍浣犵殑涓氬姟涓渶瑕佺殑涓婁笅鏂囷紝浣嗘槸鍓嶆彁鏄暟鎹被鍨嬪繀椤绘弧瓒宠姹傘€傚鏋滀笟鍔′腑鏈塛ebHooks鏈嶅姟锛屼篃搴旇閬靛惊鍏禖loueEvents瑙勮寖銆傝嚦浜庢牳蹇冭鑼冧腑鎻愬埌鐨勫叾浠栭儴鍒嗭紝鏄鍏舵彁渚涚殑鍔熻兘鐨勮В閲婂拰杩涗竴姝ユ弿杩帮紝渚嬪锛氬紑鍙戣€呭彂閫佺殑鏁版嵁锛屽彲鑳藉嚭鐜扮殑瀹夊叏闂搴旂敱寮€鍙戣€呰В鍐炽€傛椿鍔ㄨ妯℃湁闄愩€傚洖鍒扮洰鐨勬湰韬紝杩欏瑙勮寖鎵€鑳芥彁渚涚殑鏄鍔犱笟鍔$殑鍙Щ妞嶆€с€傚綋鐒讹紝杩欏苟涓嶇湡鐨勯渶瑕佸紑鍙戜汉鍛樺湪鍚勭浜戞湇鍔′箣闂存潵鍥炴憜鍔ㄣ€傛鏄究鎼烘€х殑鎻愬崌锛屽甫鏉ヤ簡寮€鍙戣€呭钩鍙伴棿浜ゆ祦渚垮埄鎬х殑鎻愬崌锛岄殢涔嬭€屾潵鐨勬槸瀛︿範鎴愭湰鐨勯檷浣庛€傝櫧鐒剁幇鍦ㄧ湅璧锋潵鏁版嵁缁撴瀯娌℃湁閭d箞澶嶆潅锛屼絾鏄殢鐫€涓氬姟澶嶆潅搴︾殑澧炲姞锛屼綔涓哄紑鍙戣€呮洿甯屾湜瀵规帴鐨勬牸寮忕ǔ瀹氱粺涓€锛岃€屼笉鏄啓鍚勭閫傞厤鍣ㄣ€備互GoogleCloudFunctionsGen2涓轰緥锛屽湪缂栧啓浜嬩欢椹卞姩鍑芥暟鏃讹紝涓嶅啀寤鸿鏃犺璇█濡備綍锛屽湪鎵€鏈夎繍琛屾椂閮戒娇鐢–loudEvent鍑芥暟銆俧unctions.cloudEvent('myCloudEventFunction',cloudEvent=>{//浣犵殑浠g爜鍦ㄨ繖閲?/閫氳繃cloudEvent.data璁块棶CloudEvent鏁版嵁璐熻浇});packagemycloudeventfunctionimport("context""github.com/GoogleCloudPlatform/functions-framework-go/functions""github.com/cloudevents/sdk-go/v2/event")funcinit(){//浣跨敤FunctionsFrameworkfunctions.CloudEvent("MyCloudEventFunction",myCloudEventFunction)}//FunctionmyCloudEventFunction鎺ュ彈鍜屽鐞咰loudEventobjectfuncmyCloudEventFunction(ctxcontext.Context,eevent.Event)error{//浣犵殑浠g爜鍦ㄨ繖閲?/閫氳繃e.Data()鎴杄.DataAs(...)璁块棶CloudEvent鏁版嵁璐熻浇//濡傛灉杩斿洖nilnoerroroccurredreturnnil}鎰忔€濇槸浣犲湪寮€鍙戝嚱鏁扮殑鏃跺€欙紝鍙傛暟鏍煎紡鍜孋loudEvents鎻愪緵鐨勫畬鍏ㄤ竴鏍枫€傛澶栵紝MicrosoftAzure鍦ㄦ搷浣滄枃妗d腑涔熸彁鍒颁簡濡備綍浣跨敤CloudEvents鏉ラ厤鍚堜粬浠殑EventGrid銆係DK浣跨敤涓€涓畝鍗曠殑鍦烘櫙浣滀负璧风偣鏉ヤ簡瑙DK鐨勪綔鐢ㄣ€傛垜浠垎鍑犱釜娴佺▼锛氬鎴风鍙戣捣璇锋眰锛宺equest-body鍖呭惈涓氬姟鏁版嵁銆傛湇鍔$鏀跺埌璇锋眰锛岃幏鍙朒eader/Body锛岃皟鐢–loudEvents-SDK鐢熸垚鐩稿簲鏍煎紡鐨勬暟鎹紝璋冪敤FaaS鐨勪竴涓嚱鏁帮紝灏嗚浆鎹㈠悗鐨勬暟鎹牸寮忔敞鍏ュ埌鍑芥暟涓€侰lientimportaxiosfrom'axios'axios({method:'post',url:'http://localhost:1234',data:{name:'JohnDoe',age:40,},//headers:{},})鏈嶅姟鍣ㄧexpressfrom'express'import{CloudEvent,HTTP}from'cloudevents'importbpfrom'body-parser'constapp=express()constport=1234app.use(bp.json())app.浣跨敤锛坆p.urlencoded锛坽extended:true}锛夛級app.post('/',(req,res)=>{console.log('HEADERS',req.headers)console.log('BODY',req.body)try{constevent=HTTP.toEvent({headers:{...req.header,'content-type':'application/cloudevents+json',},body:req.body,})//浜嬩欢->HTTP.toEvent鍙樹负锛?/console.log(event)===>{//id:'66711760-1da0-4db3-b6b0-fbdc6de98244',*Add//time:'2022-09-06T13:37:50.641Z',*Add//specversion:'1.0',*Add//name:'JohnDoe',#BusinessData//age:40銆?涓氬姟鏁版嵁//}//姝eCloudEvents瑙勮寖涓墍鎸囧嚭鐨勶細//鐢变簬涓€涓簨浠剁殑鍙戠敓锛屽彲鑳戒細浜х敓澶氫釜浜戜簨浠?/褰撴墍鏈夎繖浜涗簨浠堕兘鏉ヨ嚜鍚屼竴涓簨浠舵簮鏃朵骇鐢熸瘡涓簨浠舵瘡涓狢loudEvent灏嗘湁涓€涓敮涓€鐨刬dconstce={//杩欎竴姝ユ槸鏁村悎瀛楁//鍏朵腑source鍜宼ype鏄繀濉瓧娈?/瀛楁璇︽儏瑙侊細https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/translated/zh-cn/spec_CN.md#%E5%BF%85%E8%A6%81%E5%B1%9E%E6%80%A7...浜嬩欢锛屾潵婧愶細'/',绫诲瀷:'娴嬭瘯绫诲瀷',}constresponseEventMessage=newCloudEvent(ce)responseEventMessage.data={hello:'world',}//constmessage=HTTP.binary(responseEventMessage)//console.log(message)===>{//headers:{//'content-type':'application/json;charset=utf-8',//'ce-id':'66711760-1da0-4db3-b6b0-fbdc6de98244',//'ce-time':'2022-09-06T13:37:50.641Z',//'ce-type':'test-type',//'ce-source':'/',//'ce-specversion':'1.0',//'ce-name':'JohnDoe',//'ce-age':40,//},//body:'{"hello":"world"}',//}constmessage=HTTP.structured(responseEventMessage)//console.log(message)===>{//headers:{//'content-type':'application/cloudevents+json;charset=utf-8',//},//body:'{"id":"66711760-1da0-4db3-b6b0-fbdc6de98244","time":"2022-09-06T13:37:50.641Z","type":"test-type","source":"/","specversion":"1.0","name":"JohnDoe","age":40,"data":{"hello":"world"}}',//}//馃憜鎮ㄥ彲浠ラ€夋嫨浠ヤ袱绉嶆牸寮忚緭鍑烘暟鎹?/...閬靛惊閫昏緫}catch(err){console.error(err)}})app.listen(port,()=>{console.log(`Exampleapp鐩戝惉http://localhost:${port}`)})