区块链 hyperledger sawtooth 钱包(三) -

2020-06-18  本文已影响0人  Charles_linzc

当一个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的配置文件:

上一篇下一篇

猜你喜欢

热点阅读