HyperLeger织物SDK开发(五)事件

  

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事件”)
  }//超时预计由于没有事件生成器//输出:
   之前
  

二、事件常用接口

  

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开发(五)事件