HyperLeger织物SDK开发(五)——事件
一、事件简介
1、事件简介
事件包支持访问布网络上的通道事件。事件客户端可以接收区块事件,过滤区块事件,链码事件和交易状态事件。
官方文档:https://godoc.org/github.com/hyperledger/fabric-sdk-go/pkg/client/event
2、事件使用基本流程
事件使用基本流程如下:
,准备通道客户端上下文
B,创建事件客户端
C,注册事件
D,处理事件(或超时)
E,注销事件
使用示例:
<代码> ec,犯错:=New (mockChannelProvider (“mychannel”)) 如果犯错!=nil { fmt。Println(“未能创建客户端”) } 登记、通知、err:=ec。RegisterChaincodeEvent (“examplecc”、“event123”) 如果犯错!=nil { fmt。Println(“未能注册chaincode事件”) } 推迟ec.Unregister(登记) 选择{ 案例ccEvent:=& lt;通知: fmt。Printf("收到chaincode事件% v \ n”, ccEvent) & lt;还(时间。第二个* 5): fmt。Println(“超时等待chaincode事件”) }//超时预计由于没有事件生成器//输出: //超时等待chaincode事件代码> >之前二、事件常用接口
1,事件客户端获取
<代码>类型客户结构{ eventService fab.EventService permitBlockEvents bool fromBlock uint64 seekType seek.Type } func (channelProvider上下文。ChannelProvider,选择…ClientOption)(*客户,错误)代码>返回事件客户端实例。客户端接收区块事件,过滤区块事件,链码事件和交易状态事件。
使用示例:<代码> ctx:=mockChannelProvider (“mychannel”) ec,犯错:=New (ctx WithBlockEvents ()) 如果犯错!=nil { fmt.Println (err) } 如果ec !=nil { fmt。Println(“事件创建客户端”) 其他}{ fmt。Println(“事件客户零”) }//输出://事件客户机创建代码>2,注册区块事件
<代码> func (c *客户端)RegisterBlockEvent(过滤器…fab.BlockFilter)(工厂。登记,lt;脚板*工厂。BlockEvent,错误)代码>
注册块事件。如果调用者没有注册区块事件的权限,则返回错误。不再需要注册时,必须调用取消注册。
参数:
过滤器是一个可选的过滤器,可过滤掉不需要的事件。只能指定一个过滤器。
返回:注册对象和用于接收事件的通道。调用注销时,通道将关闭。
使用示例:<代码> ec,犯错:=New (mockChannelProvider (“mychannel”), WithBlockEvents ()) 如果犯错!=nil { fmt。Println(“未能创建客户端”) } 注册、_犯错:=ec.RegisterBlockEvent () 如果犯错!=nil { fmt。Println(“未能寄存器组事件”) } 推迟ec.Unregister(登记) fmt。Println(成功注册“阻塞事件”)//输出://阻塞事件注册成功代码>3注册链码事件
<代码> func (c *客户端)RegisterChaincodeEvent(赛迪,eventFilter字符串)(工厂。登记,lt;脚板*工厂。CCEvent,错误)代码>
注册链代码事件。不再需要注册时,必须调用注销。
参数:
赛迪是用于接收事件的链码ID
eventFilter是用于接收事件的链码事件过滤器(正则表达式)
返回:注册对象和用于接收事件的通道。调用取消注册时,通道将关闭。
使用示例:<代码> ec,犯错:=New (mockChannelProvider (“mychannel”)) 如果犯错!=nil { fmt。Println(“未能创建客户端”) } 注册、_犯错:=ec。RegisterChaincodeEvent (“examplecc”、“event123”) 如果犯错!=nil { fmt。Println(“未能注册chaincode事件”) } 推迟ec.Unregister(登记) fmt。Println (“chaincode事件注册成功”)//输出://chaincode事件注册成功代码>使用示例:
<代码>//如果你要求必须使用WithBlockEvents chaincode事件有效负载()选项 ec,犯错:=New (mockChannelProvider (“mychannel”), WithBlockEvents ()) 如果犯错!=nil { fmt。Println(“未能创建客户端”) } 注册、_犯错:=ec。RegisterChaincodeEvent (“examplecc”、“event123”) 如果犯错!=nil { fmt。Println(“未能注册chaincode事件”) } 推迟ec.Unregister(登记) fmt。Println (“chaincode事件注册成功”)//输出://chaincode事件注册成功代码>4,注册过滤区块事件
<代码> func (c *客户端)RegisterFilteredBlockEvent()(工厂。登记,lt;脚板*工厂。FilteredBlockEvent,错误)
HyperLeger织物SDK开发(五)事件