当前位置: 首页 > news >正文

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)}
}

相关文章:

CloudEvents—云原生事件规范

我们的系统中或多或少都会用到如下两类业务技术&#xff1a; 异步任务&#xff0c;用于降低接口时延或削峰&#xff0c;提升用户体验&#xff0c;降低系统并发压力&#xff1b;通知类RPC&#xff0c;用于微服务间状态变更&#xff0c;用户行为的联动等场景&#xff1b; 以上两种…...

神经网络基础-神经网络补充概念-51-局部最优问题

概念 局部最优问题是在优化问题中常见的一个挑战&#xff0c;特别是在高维、非凸、非线性问题中。局部最优问题指的是算法在优化过程中陷入了一个局部最小值点&#xff0c;而不是全局最小值点。这会导致优化算法在某个局部区域停止&#xff0c;而无法找到更好的解。 解决方案…...

深度学习中,什么是batch-size?如何设置?

什么是batch-size? batch-size 是深度学习模型在训练过程中一次性输入给模型的样本数量。它在训练过程中具有重要的意义&#xff0c;影响着训练速度、内存使用以及模型的稳定性等方面。 以下是 batch-size 大小的一些影响和意义&#xff1a; 训练速度&#xff1a;较大的 bat…...

[保研/考研机试] KY26 10进制 VS 2进制 清华大学复试上机题 C++实现

题目链接&#xff1a; 10进制 VS 2进制http://www.nowcoder.com/share/jump/437195121691738172415 描述 对于一个十进制数A&#xff0c;将A转换为二进制数&#xff0c;然后按位逆序排列&#xff0c;再转换为十进制数B&#xff0c;我们称B为A的二进制逆序数。 例如对于十进制…...

JSP-学习笔记

文章目录 1.JSP介绍2 JSP快速入门3 JSP 脚本3.1 JSP脚本案例3.2 JSP缺点 4 EL表达式4.1 快速入门案例 5. JSTL标签6. MVC模式和三层架构6.1 MVC6.2 三层架构 7. 案例-基于MVC和三层架构实现商品表的增删改查 1.JSP介绍 概念 JSP&#xff08;JavaServer Pages&#xff09;是一种…...

Golang协程,通道详解

进程、线程以及并行、并发 关于进程和线程 进程&#xff08;Process&#xff09;就是程序在操作系统中的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff0c;进程是一个动态概念&#xff0c;是程序在执行过程中分配和管理资源的基本单位&#xff0c;每一…...

unity 之 Vector 数据类型

文章目录 Vector 1Vector 2Vector 3Vector 4 Vector 1 在Unity中&#xff0c;Vector1 并不是一个常见的向量类型。 如果您需要表示标量&#xff08;单个值&#xff09;或者只需要一维的数据&#xff0c;通常会直接使用浮点数&#xff08;float&#xff09;或整数&#xff08;in…...

私密数据采集:隧道爬虫IP技术的保密性能力探究

作为一名专业的爬虫程序员&#xff0c;今天要和大家分享一个关键的技术&#xff0c;它能够为私密数据采集提供保密性能力——隧道爬虫IP技术。如果你在进行敏感数据采集任务时需要保护数据的私密性&#xff0c;那么这项技术将是你的守护神。 在进行私密数据采集任务时&#xff…...

使用git rebase 之后的如何恢复到原始状态

我们常常喜欢使用git rebase去切换分支提交代码,操作流程就是: 先切换分支:比如当前是master 我们修改了一堆代码产生一个commit id :5555555567777 那么我们常常比较懒就直接切换了:git checkout dev 然后呢?使用命令git rebase 5555555567777,想把这笔修改提交到d…...

matlab相机标定知识整理

matlab相机标定知识整理 单目相机标定 单目相机标定 内参矩阵&#xff1a;cameraParams.Intrinsics.K 或者 cameraParams.K旋转矩阵&#xff1a;cameraParams.RotationMatrices 有待确定 cameraParams.RotationVectors平移矩阵&#xff1a;cameraParams.TranslationVectors径向…...

win11安装ubuntu 子系统安装过程及注意事项

第一步 &#xff1a;安装系统必须组件 由于子系统是系统自带组件&#xff0c;需要安装软件支持 第二步&#xff1a;应用商店安装 ubuntu 编辑 编辑 这个时候打开会报错 第三步&#xff0c;运行linux子系统 选择Windows PowerShell 以管理员身份运行&#xff09; 输入&#…...

torch.cat((A,B),dim=1)解析

官方说明torch.cat 引用自&#xff1a;Pytorch中的torch.cat()函数 torch.cat(tensors, dim0, *, outNone) → Tensor # 连接给定维数的给定序列的序列张量。所有张量要么具有相同的形状(除了连接维度)&#xff0c;要么为空。示例 输入&#xff1a; import torch a torch.Tens…...

apache配置安全证书https踩坑记录

apache配置安全证书有如下几步 一、申请证书 这个网上有很多免费的&#xff0c;我用的是阿里云的服务器&#xff0c;在阿里云后台就可以申请免费证书。 二、上传证书 申请好证书后&#xff0c;根据服务器用的什么软件&#xff0c;是apache还是ngnix&#xff0c;下载相应的证书…...

SQL Server Express 自动备份方案

文章目录 SQL Server Express 自动备份方案前言方案原理SQL Server Express 自动备份1.创建存储过程2.设定计划任务3.结果检查sqlcmd 参数说明SQL Server Express 自动备份方案 前言 对于许多小型企业和个人开发者来说,SQL Server Express是一个经济实惠且强大的数据库解决方…...

Docker资源控制

目录 一、CPU 资源控制 1.设置CPU使用率上限 2.设置CPU资源占用比&#xff08;设置多个容器时才有效&#xff09; 3.设置容器绑定指定的CPU 二、对内存使用的限制 三、对磁盘IO配额控制&#xff08;blkio&#xff09;的限制 一、CPU 资源控制 cgroups&#xff0c;是一个非常强…...

微服务中间件-分布式缓存Redis

分布式缓存 a.Redis持久化1) RDB持久化1.a) RDB持久化-原理 2) AOF持久化3) 两者对比 b.Redis主从1) 搭建主从架构2) 数据同步原理&#xff08;全量同步&#xff09;3) 数据同步原理&#xff08;增量同步&#xff09; c.Redis哨兵1) 哨兵的作用2) 搭建Redis哨兵集群3) RedisTem…...

java面试强基(16)

目录 clone方法的保护机制 Java中由SubString方法是否会引起内存泄漏&#xff1f; Java中提供了哪两种用于多态的机制? 程序计数器(线程私有) 如何判断对象是否是垃圾&#xff1f; clone方法的保护机制 clone0方法的保护机制在Object中是被声明为 protected的。以User…...

Python可视化在量化交易中的应用(13)_Seaborn直方图

Seaborn中带核密度的直方图的绘制方法 seaborn中绘制直方图使用的是sns.histlot()函数&#xff1a; sns.histplot(data,x,y,hue,weights,stat‘count’,bins‘auto’,binwidth,binrange,discrete,cumulative,common_bins,common_norm,multiple‘layer’,element‘bars’,fill,…...

NOIP 2006 普及组 第二题 开心的金明

开心的金明 说明 金明今天很开心&#xff0c;家里购置的新房就要领钥匙了&#xff0c;新房里有一间他自己专用的很宽敞的房间。 更让他高兴的是&#xff0c;妈妈昨天对他说&#xff1a;“你的房间需要购买哪些物品&#xff0c;怎么布置&#xff0c;你说了算&#xff0c;只要不超…...

「UG/NX」Block UI 指定点SpecifyPoint

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#...

OpenCore Legacy Patcher终极指南:5步让老旧Mac完美运行最新macOS系统

OpenCore Legacy Patcher终极指南&#xff1a;5步让老旧Mac完美运行最新macOS系统 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher是…...

Docker容器化Emacs:构建可移植、一致的开发环境解决方案

1. 项目概述&#xff1a;为什么要在Docker里运行Emacs&#xff1f;如果你是一个Emacs的重度用户&#xff0c;或者是一个开发者&#xff0c;你很可能遇到过这样的困境&#xff1a;你精心配置的Emacs环境&#xff0c;在换了一台新电脑、升级了操作系统&#xff0c;或者需要在多台…...

基于RP2040与CircuitPython的键盘内嵌DOOM游戏启动器DIY指南

1. 项目概述与核心思路几年前&#xff0c;我还在用笨重的全尺寸键盘时&#xff0c;就总琢磨着怎么给这每天摸上八小时的家伙加点“私货”。直到后来玩起了RP2040和CircuitPython&#xff0c;一个念头就冒出来了&#xff1a;能不能把游戏直接“焊”进键盘里&#xff1f;不是那种…...

基于Electron的ChatGPT桌面客户端开发:架构、功能与进阶实践

1. 项目概述&#xff1a;一个开源桌面客户端的诞生与价值如果你和我一样&#xff0c;在日常开发、写作或者处理一些需要深度思考的任务时&#xff0c;经常需要和ChatGPT这样的AI助手对话&#xff0c;那你一定对在浏览器里反复切换标签页、刷新页面、管理冗长的对话历史感到厌烦…...

Excalidraw草图AI技能:从图形解析到自动化代码生成实战

1. 项目概述&#xff1a;一个能“读懂”你草图的AI技能如果你经常用Excalidraw画流程图、架构图或者UI草图&#xff0c;那你一定遇到过这样的场景&#xff1a;画完一张图&#xff0c;想把它整理成文档&#xff0c;或者想基于这张图生成一些代码&#xff0c;又或者想让它自己动起…...

紧急更新!Midjourney 6.6新引入的--chaos=97抽象阈值与表现主义情绪映射关系表(行业首份实测白皮书)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney抽象表现主义的范式跃迁 当AI图像生成从具象摹写迈入语义解构与形式重构阶段&#xff0c;Midjourney v6 的提示工程已不再满足于“梵高风格的星空”&#xff0c;而是主动参与抽象表现主义的本…...

LoRA模型合并实战指南:多技能融合与vLLM部署

1. 项目概述&#xff1a;LoRA模型合并的“瑞士军刀”最近在折腾大语言模型微调的朋友&#xff0c;估计对LoRA&#xff08;Low-Rank Adaptation&#xff09;这个词都不陌生。它就像给预训练好的大模型“打补丁”&#xff0c;用极小的参数量&#xff08;通常只有原模型的0.1%到1%…...

DashClaw:模块化命令行工具的设计哲学与实战应用

1. 项目概述&#xff1a;一个为开发者打造的“瑞士军刀”式命令行工具最近在折腾一个自动化部署脚本时&#xff0c;遇到了一个老生常谈的问题&#xff1a;我需要从一堆杂乱的日志文件里&#xff0c;快速提取出特定时间段的错误信息&#xff0c;同时还要把这些信息按照严重程度分…...

Point Transformer V3 牙齿语义分割测试结果为0问题:完整调试与修复方案

Point Transformer V3 牙齿语义分割测试结果为0问题:完整调试与修复方案 摘要 Point Transformer V3(PTv3)是CVPR 2024发布的高效点云处理模型,在语义分割任务中表现出色。然而,在16类牙齿语义分割任务的测试阶段,模型输出全部为0的问题却常常困扰开发者。本文将从数据…...

避坑指南:QGraphicsView自适应缩放时,为什么你的Item总对不齐或留白?

避坑指南&#xff1a;QGraphicsView自适应缩放时Item对齐与留白问题深度解析 在Qt图形界面开发中&#xff0c;QGraphicsView框架因其强大的2D显示能力被广泛应用。但当开发者尝试实现视图内容的自适应缩放时&#xff0c;经常会遇到一个令人头疼的问题——调用fitInView后&#…...