CloudEvents—云原生事件規范

我們的系統中或多或少都會用到如下兩類業務技術:

  • 異步任務,用于降低接口時延或削峰,提升用戶體驗,降低系統并發壓力;

  • 通知類RPC,用于微服務間狀態變更,用戶行為的聯動等場景;

以上兩種場景,都十分適合使用事件驅動來實現。

但是對于事件的描述,現在還缺乏一種統一描述,服務使用方和提供方往往要花費大量的時間溝通字段定義,憑直覺設計事件屬性,并在將來的使用過程中會因為新增或修改事件的屬性而增加很大的額外工作量。

隨著云原生的到來,急需一種統一的事件定義和描述規范,以提供跨服務、跨平臺的交互能力,而這就是CloudEvents項目的誕生背景。

CloudEvents是一個用通用格式描述事件數據的規范,以提供跨服務、跨平臺和跨系統的互操作性。目前得到了大量的行業關注,從主要的云提供商到流行的SaaS公司都有。CloudEvents由云原生計算基金會(CNCF)主辦,于2018年5月15日獲批為云原生沙盒級項目。

https://github.com/cloudevents?概要地描述其標準如下:

Event描述

Event: 描述Occurrence的數據,包括data和context。

  • Data:最主要的業務數據,由使用者定義。

  • Context:上下文屬性,可以理解成發送event時候的環境信息。用來標識事件與系統或其他事件之間的關系。

Data描述

業務相關的信息都封裝在數據屬性中,由業務方自行約定,
一般來說,都是業務model,比如protobuf,這樣可以更好的管理。

data: {"metadata": {"name": "event-display.15a0a2b54007189b","namespace": "default","selfLink": "/api/v1/namespaces/default/events/event-display.15a0a2b54007189b","uid": "9195ff11-7b9b-11e9-b1f1-00163f005e02","resourceVersion": "18070551","creationTimestamp": "2019-05-21T07:39:30Z"},"involvedObject": {"kind": "Route","namespace": "default","name": "event-display","uid": "31c68419-675b-11e9-a087-00163e08f3bc","apiVersion": "serving.knative.dev/v1alpha1","resourceVersion": "9242540"},"reason": "InternalError","message": "Operation cannot be fulfilled on clusteringresses.networking.internal.knative.dev \"route-31c68419-675b-11e9-a087-00163e08f3bc\": the object has been modified; please apply your changes to the latest version and try again","source": {"component": "route-controller"},"firstTimestamp": "2019-05-21T07:39:30Z","lastTimestamp": "2019-05-26T07:10:51Z","count": 5636,"type": "Warning","eventTime": null,"reportingComponent": "","reportingInstance": ""}

Context描述

必選(REQUIRED)參數:

  • id:事件唯一編號,如UUID

  • source:數據源信息,用來區別發送方

  • specversion:使用的cloudEvents規范版本,如0.2

  • type:發送方定義的事件類型,可以用來過濾和轉發,通常此屬性用于路由、監控、安全策略等

可選(OPTIONAL)參數:

  • datacontentencoding:數據屬性的編碼格式

  • datacontenttype:數據屬性的解析方式,從json擴展到其他可選類型

  • schemaurl:數據的schema地址

  • subject:事件的主題,類似MQ里的topic

  • time:事件發生的時間戳

  • extions:擴展能力,在實現中是個List<Extension>樣式,Extension是個接口由使用方實現

示例

官方目前提供了9種語言的SDK,極大方便開發人員進行集成開發。在業界,已有包括谷歌、AWS、微軟、阿里云、騰訊云等開始使用CloudEvents規范向用戶提供云平臺內的事件通知。

下面使用sdk-go進行簡單的使用示范。

事件接收端:

func Receive(event cloudevents.Event) {fmt.Printf("event info: %v", event)
}func main() {c, err := cloudevents.NewDefaultClient()if err != nil {log.Fatalf("failed to create client, %+v", err)}log.Fatal(c.StartReceiver(context.Background(), Receive));
}


事件發送端:

func main() {t, err := cloudevents.NewHTTPTransport(cloudevents.WithTarget("xxx"),cloudevents.WithEncoding(cloudevents.HTTPBinaryV02),)if err != nil {log.Fatal("failed to create transport, err: %+v ", err)}c, err := cloudevents.NewClient(t)if err != nil {log.Fatal("failed to create client, err: %+v", err)}event := cloudevents.NewEvent()event.SetID("11111")event.SetType("com.cloudevents.ts.test")event.SetSource("xxx")data := NewXXX()event.SetData(data)if err := c.Send(ctx, event); err != nil {log.Fatal("failed to send cloudevent, err: %+v", err)}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38713.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38713.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38713.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Go和Java實現解釋器模式

Go和Java實現解釋器模式 下面通過一個四則運算來說明解釋器模式的使用。 1、解釋器模式 解釋器模式提供了評估語言的語法或表達式的方式&#xff0c;它屬于行為型模式。這種模式實現了一個表達式接口&#xff0c;該接口 解釋一個特定的上下文。這種模式被用在 SQL 解析、符…

規劃性和可擴展性,助力企業全面預算管理的推進

對于當今社會經濟市場的不穩定狀況和不斷變化的消費者行為&#xff0c;企業業務也從未像今天這樣不可預測過。面對變化和變革&#xff0c;企業需要具備規劃性的預測能力&#xff0c;才能使得自身在競爭中保持領先地位。那些具備前瞻性的企業都嘗試在現階段通過更好的規劃不斷提…

基于Mysqlrouter+MHA+keepalived實現高可用半同步 MySQL Cluster項目

目錄 項目名稱&#xff1a; 基于Mysqlrouter MHA keepalived實現半同步主從復制MySQL Cluster MySQL Cluster&#xff1a; 項目架構圖&#xff1a; 項目環境&#xff1a; 項目環境安裝包&#xff1a; 項目描述&#xff1a; 項目IP地址規劃&#xff1a; 項目步驟: 一…

windows11下配置vscode中c/c++環境

本文默認已經下載且安裝好vscode&#xff0c;主要是解決環境變量配置以及編譯task、launch文件的問題。 自己嘗試過許多博客&#xff0c;最后還是通過這種方法配置成功了。 Linux(ubuntu 20.04)配置vscode可以直接跳轉到配置task、launch文件&#xff0c;不需要下載mingw與配…

寬度有限搜索BFS搜索數及B3625 迷宮尋路 P1451 求細胞數量 B3626 跳躍機器人

寬度有限搜索BFS搜索 B3625 迷宮尋路 題面 題目描述 機器貓被困在一個矩形迷宮里。 迷宮可以視為一個 nm 矩陣&#xff0c;每個位置要么是空地&#xff0c;要么是墻。機器貓只能從一個空地走到其上、下、左、右的空地。 機器貓初始時位于 (1,1) 的位置&#xff0c;問能否…

localhost:8080 is already in use

報錯原因&#xff1a;本機的8080端口號已經被占用。因為機器的空閑端口號是隨機分配的&#xff0c;而idea默認啟動的端口號是8080,所以是存在這種情況。 對于這個問題&#xff0c;我們只需要重啟idea或者修改項目的啟動端口號即可。 更推薦第二種。對于修改項目啟動端口號&…

Python 程序設計入門(020)—— 循環結構程序設計(1):for 循環

Python 程序設計入門&#xff08;020&#xff09;—— 循環結構程序設計&#xff08;1&#xff09;&#xff1a;for 循環 目錄 Python 程序設計入門&#xff08;020&#xff09;—— 循環結構程序設計&#xff08;1&#xff09;&#xff1a;for 循環一、for 循環的語法二、for …

ZDH-wemock模塊

本次介紹基于版本v5.1.1 目錄 項目源碼 預覽地址 安裝包下載地址 wemock模塊 wemock模塊前端 配置首頁 配置mock wemock服務 下載地址 打包 運行 效果展示 項目源碼 zdh_web: https://github.com/zhaoyachao/zdh_web zdh_mock: https://github.com/zhaoyachao/z…

TCGA數據下載推薦:R語言easyTCGA包

#使用easyTCGA獲取數據 #清空 rm(listls()) gc() # 安裝bioconductor上面的R包 options(BioC_mirror"https://mirrors.tuna.tsinghua.edu.cn/bioconductor") if(!require("BiocManager")) install.packages("BiocManager") if(!require("TC…

怎樣讓音頻速度變慢?請跟隨以下方法進行操作

怎樣讓音頻速度變慢&#xff1f;在會議錄音過程中&#xff0c;經常會遇到主講人語速過快&#xff0c;導致我們無法清晰聽到對方說的內容。如果我們能夠減慢音頻速度&#xff0c;就能更好地記錄對方的講話內容。此外&#xff0c;在聽到快速播放的外語或方言時&#xff0c;我們也…

LA@2@1@線性方程組和簡單矩陣方程有解判定定理

文章目錄 矩陣方程有解判定定理線性方程組有解判定特化:齊次線性方程組有解判定推廣:矩陣方程 A X B AXB AXB有解判定證明推論 矩陣方程有解判定定理 線性方程組有解判定 線性方程組 A x b A\bold{x}\bold{b} Axb有解的充分必要條件是它的系數矩陣A和增廣矩陣 ( A , b ) (A,…

機器人的運動范圍

聲明 該系列文章僅僅展示個人的解題思路和分析過程&#xff0c;并非一定是優質題解&#xff0c;重要的是通過分析和解決問題能讓我們逐漸熟練和成長&#xff0c;從新手到大佬離不開一個磨練的過程&#xff0c;加油&#xff01; 原題鏈接 機器人的運動范圍https://leetcode.c…

高等數學教材重難點題型總結(二)導數與微分

本章重點題目較少&#xff0c;除了*標題頁沒什么特別難的&#xff0c;本帖出于總結性的角度考慮并未囊概全部的*標&#xff0c;最后會出一期*標題的全部內容整理&#xff0c;在攻克重難點的基礎上更上一層樓。 1.根據定義求某點處的導數值 2.通過定義證明導數 3.左右導數的相關…

【數據庫】P4 過濾數據 WHERE

過濾數據 WHERE 簡介WHERE 子句操作符檢測單個值案例范圍值檢查 BETWEEN AND空值檢查 NULL 簡介 數據庫表一般包含大量的數據&#xff0c;很少需要檢索表中的所有行。我們只檢索所需數據需要指定搜索條件(search criteria)&#xff0c;搜索條件也稱為過濾條件(filter conditio…

完全備份、增量備份、差異備份、binlog日志

Top NSD DBA DAY06 案例1&#xff1a;完全備份與恢復案例2&#xff1a;增量備份與恢復案例3&#xff1a;差異備份與恢復案例4&#xff1a;binlog日志 1 案例1&#xff1a;完全備份與恢復 1.1 問題 練習物理備份與恢復練習mysqldump備份與恢復 1.2 方案 在數據庫服務器192…

問AI一個嚴肅的問題

chatgpt的問世再一次掀起了AI的浪潮&#xff0c;其實我一直在想&#xff0c;AI和人類的關系未來會怎樣發展&#xff0c;我們未來會怎樣和AI相處&#xff0c;AI真的會完全取代人類嗎&#xff0c;帶著這個問題&#xff0c;我問了下chatgpt&#xff0c;看一看它是怎么看待這個問題…

Modbus工業RFID設備在自動化生產線中的應用

傳統半自動化生產線在運作的過程&#xff0c;因為技工的熟練程度&#xff0c;專業素養的不同&#xff0c;在制造過程中過多的人為干預&#xff0c;工廠將很難對每條生產線的產能進行標準化管理和優化。如果半自動化生產線系統是通過前道工序的作業結果和檢測結果來決定產品在下…

react實現模擬彈框遮罩的自定義hook

需求描述 點擊按鈕用于檢測鼠標是否命中按鈕 代碼實現 import React from react; import {useState, useEffect, useRef} from react;// 封裝一個hook用來檢測當前點擊事件是否在某個元素之外 function useClickOutSide(ref,cb) {useEffect(()>{const handleClickOutside…

JMeter接口自動化測試實例—JMeter引用javaScript

Jmeter提供了JSR223 PreProcessor前置處理器&#xff0c;通過該工具融合了Java 8 Nashorn 腳本引擎&#xff0c;可以執行js腳本以便對腳本進行前置處理。其中比較典型的應用就是通過執行js腳本對前端數據進行rsa加密&#xff0c;如登錄密碼加密。但在這里我就簡單的應用javaScr…

PyTorch翻譯官網教程-NLP FROM SCRATCH: GENERATING NAMES WITH A CHARACTER-LEVEL RNN

官網鏈接 NLP From Scratch: Generating Names with a Character-Level RNN — PyTorch Tutorials 2.0.1cu117 documentation 使用字符級RNN生成名字 這是我們關于“NLP From Scratch”的三篇教程中的第二篇。在第一個教程中</intermediate/char_rnn_classification_tutor…