网站大气是什么意思,app代理推广合作,电子商务网站建设的主要内容,关于建设公司网站的请示我们的系统中或多或少都会用到如下两类业务技术#xff1a; 异步任务#xff0c;用于降低接口时延或削峰#xff0c;提升用户体验#xff0c;降低系统并发压力#xff1b;通知类RPC#xff0c;用于微服务间状态变更#xff0c;用户行为的联动等场景#xff1b; 以上两种… 我们的系统中或多或少都会用到如下两类业务技术 异步任务用于降低接口时延或削峰提升用户体验降低系统并发压力通知类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事件唯一编号如UUIDsource数据源信息用来区别发送方specversion使用的cloudEvents规范版本如0.2type发送方定义的事件类型可以用来过滤和转发通常此属性用于路由、监控、安全策略等 可选OPTIONAL参数 datacontentencoding数据属性的编码格式datacontenttype数据属性的解析方式从json扩展到其他可选类型schemaurl数据的schema地址subject事件的主题类似MQ里的topictime事件发生的时间戳extions扩展能力在实现中是个ListExtension样式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)}
}