区块链 hyperledger sawtooth 钱包(三) -
当一个Certification 提交到sawtooth区块链后, 通常我们需要知道Certification 最终是否提交成功,以及错误。 Sawtooth 在框架中提供了事件订阅机制。
简单的说, 写一个程序,通过zmq像validator发送订阅消息, 订阅消息中的类型、和过滤器定义了想要接收到的消息。
这里,我们写一个Java的独立dbsync程序,监听Certification的提交,具体更新数据库业务省略。
项目目录结构:
我们通过一个EventProcessor的Demo程序,来看一下Java便是Event 处理器放的方法。
初始化方法里,我们创建一个ZmqStream对象,参数为Validtor的地址和端口(将在Docker的启动程序中声明); 注册状态默认为False表示哈没有注册。 增加一个Shutdown的结束现成,当前只打印一句消息,实际代码中,我们可以取消订阅。
在Processor的run方法中, 我们主要完成以下事情:
1. 创建一个subscription, 设置事件类型,增加一个事件Filter,在Filter中我们用书写的地址作为事件源,接收匹配带地址的事件。
2. 创建一个事件请求对象,封装subscription.
3. 使用ZMQstream发送请求,并节点结果,发送时需要设置消息类型。与Using ZMQ to Subscribe to Events 使用python代码描述的不同,这里我们不需要message wrapper, Java封装的ZMQstream会自动pack/unpack message.
4. unpack 结果为subscription response, 判断是否订阅成功。
5. 如果成功调用handleEvent(),进入事件接收与处理循环。
Event handle的方法很简单, 循环监听消息,如果是指定类型则处理,不是则跳过。
最后书写main程序,启动线程。和certProcessor类似。
public static void main(String[] args) {
System.out.println("start Event DBysnc !");
EventProcessor eventProcessor=new EventProcessor(args[0]);
new Thread(eventProcessor).start();
}
以下是DockerFile的配置文件: