描述
Plasma是用于发送专门针对流的事件的中间件。Plasma从同一端点提供EventSource和gRPC流。

安装
该中间件需要Redis。

$建立
二进制文件在bin/目录下生成。

使用泊坞窗
您还可以使用Docker映像。

$ docker run -p 8080:8080 -p 50051:50051 -p 9999:9999 openfresh / plasma
使用docker-compose
您可以使用docker-compose轻松使用,而无需准备Redis。

如果您要求带有Accept:text-stream标头,则可以使用SSE 。

您请求要订阅此端点的事件。您可以指定多个事件,以逗号分隔。可以使用EventQuery环境变量设置查询名称。(EventQuery的默认值为 eventType)。

这是一个使用[Yaffle / EventSource](https://github.com/Yaffle/EventSource)的简单示例。

var  source  =  new  EventSource ('// localhost:8080 /?eventType = program:1234:views,program:1234:poll,program:1234:annotation' );

来源。的addEventListener (“开放” , 功能(ê ) {
    控制台。登录(“开放” );
} );

来源。的addEventListener (“错误” , 函数(ê ) {
    控制台。登录(“错误” );
} );

来源。的addEventListener (“消息” , 功能(ê ) {
    控制台。日志(“事件消息:” , ê 。数据);
} );

从Plasma返回的数据的JSON模式如下。

{
“ $ schema”:“ http://json-schema.org/draft-04/schema#” ,
“ id”:“ / events” ,
“ properties”:{
“ data”:{
“ id”:“ / events / data“ ,
” type“:” string“
} ,
” meta“:{
” id“:” / events / meta“ ,
” properties“:{
” type“:{
” id“:” / events / meta /类型”,
“ type”:“ string”
}
} ,
“ type”:“ object”
}
} ,
“ type”:“ object”
}
如果DEBUG启用了环境变量,则可以访问调试端点。

GET /调试
您可以从此端点将事件发布到Redis。您需要以EventData形式输入有效的JSON。

gRPC流
您可以使用gRPC Stream订阅事件。

ProtocolBuffer文件在这里。

以下是一个简单的Go示例。

func main(){
conn,err := grpc。拨号(“本地主机:50051” ,GRPC。WithInsecure())
如果 ERR =! 无{
日志。致命(错误)
}
推迟 conn。关闭()

客户 :=  proto。NewStreamServiceClient(conn)
 ctx  := 上下文。背景()

req  := proto。要求{
    事件:[] *原型。EventType {
         eventType(“ program:1234:poll”),
         eventType(“ program:1234:views”),
    },
}

ss,err  :=  client。活动(CTX)
如果 ERR  != 零{
    日志。致命(错误)
}

//订阅事件,
如果 err  :=  ss。发送(&req); err  !=  nil {
     log。致命(错误)
}

对于{
     resp,err  :=  ss。Recv()
     if  err  !=  nil {
         log。Println(err)
        继续
    }
    如果 resp  ==  nil {
         log。Println(“有效载荷为零”)
        继续
    }
    fmt。的printf(“元:%S \吨数据:%S \ n ”,RESP。的EventType。类型,RESP。数据)
}

}
退订
Events请求是流。如果您取消订阅事件,请设置空的事件数据。

req  := proto。请求{
     //空事件
    事件:[] *原型。EventType {},
}

ss,err  :=  client。活动(CTX)
如果 ERR  != 零{
    日志。致命(错误)
}

//
如果 err  :=  ss取消订阅事件。发送(&req); err  !=  nil {
     log。致命(错误)
}

用法发布者
您可以根据以下JSON模式将事件发布到Plasma订阅的频道。

{
“ $ schema”:“ http://json-schema.org/draft-04/schema#” ,
“ id”:“ / events” ,
“ properties”:{
“ data”:{
“ id”:“ / events / data“ ,
” type“:” string“
} ,
” meta“:{
” id“:” / events / meta“ ,
” properties“:{
” type“:{
” id“:” / events / meta /类型”,
“ type”:“ string”
}
} ,
“ type”:“ object”
}
} ,
“ type”:“ object”
}
openfresh / plasma-go是包装将事件发布到Redis的库。

健康检查
GET / HC
您可以进行健康检查。检查Redis的状态。如果有问题,则返回500,如果没有问题,则返回200。

指标
GET / metrics / go
您可以从此端点获取golang指标。

可以采用以下golang指标。

姓名 类型 描述
go_version 细绳 转到的版本
go_os 细绳 操作系统
go_arch 细绳 拱
cpu_num 整型 cpus数
goroutine_num 整型 例行程序数
gomaxprocs 整型 操作系统线程数
cgo_call_num int64 CGO电话数
memory_alloc uint64 分配堆对象的字节数
memory_total_alloc uint64 分配给堆对象的累积字节
memory_sys uint64 内存总字节数
memory_lookups uint64 指针数
memory_mallocs uint64 分配的堆对象的累积计数
memory_frees uint64 释放的堆对象的累积计数
memory_stack uint64 堆栈跨度中的字节
heap_alloc uint64 分配堆对象的字节数
heap_sys uint64 获得的堆内存字节
heap_idle uint64 空闲范围中的字节
heap_inuse uint64 使用中跨度中的字节
heap_released uint64 返回操作系统的物理内存字节
heap_objects uint64 分配的堆对象数
gc_next uint64 下一个GC周期的目标堆大小
gc_last uint64 最后一次垃圾收集完成的时间,即自1970年以来的纳秒
gc_num uint32 完成的GC循环数
gc_per_second float64 每秒GC
gc_pause_per_second float64 每秒GC暂停
gc_pause [] float64 GC暂停
GET / metrics / plasma
您可以从该端点获取血浆指标。

可以采用以下golang指标。

姓名 类型 描述
连接数 int64 已连接的所有客户端数
connections_sse int64 连接的SSE客户端数量
connections_grpc int64 已连接的gRPC客户端数量