Hyperledger Java SDK客户端事件侦听器
我有一个基于Java SDK的Hyperledger结构客户端,能够连接和发送交易建议请求,在分类账中创建条目并查询分类账 我正在努力注册和收听块和链码事件。我想在客户机上启动一个单独的线程,专门用于侦听和处理这些事件 到目前为止,我发现:Hyperledger Java SDK客户端事件侦听器,java,sdk,client,event-listener,hyperledger,Java,Sdk,Client,Event Listener,Hyperledger,我有一个基于Java SDK的Hyperledger结构客户端,能够连接和发送交易建议请求,在分类账中创建条目并查询分类账 我正在努力注册和收听块和链码事件。我想在客户机上启动一个单独的线程,专门用于侦听和处理这些事件 到目前为止,我发现: HFClient client = HFClient.createNewInstance(); Channel channel = client.newChannel("channel01"); EventHub eventHub = client.newE
HFClient client = HFClient.createNewInstance();
Channel channel = client.newChannel("channel01");
EventHub eventHub = client.newEventHub("eh01", "grpc://abc.xyz.us:7053");
channel.addEventHub(eventHub);
除此之外,我迷路了。
是否有人可以发布一个如何执行此操作的示例?添加eventhub后,您需要注册此事件的列表器。请参见下面的示例
BlockListener blockListener = new BlockListener() {
@Override
public void received(BlockEvent arg0) {
Block block = arg0.getBlock();
System.out.println("BLock All FIelds :" + block.getAllFields());
System.out.println("BLock Number :" + arg0.getBlockNumber());
System.out.println("THis is buyer Listener..");
}
};
channel.registerBlockListener(blockListener);
无论您将在received方法中写入什么,只要将块添加到区块链中,就会调用该方法。
希望这对您有所帮助。添加eventhub后,您需要注册此事件的列表器。请参见下面的示例
BlockListener blockListener = new BlockListener() {
@Override
public void received(BlockEvent arg0) {
Block block = arg0.getBlock();
System.out.println("BLock All FIelds :" + block.getAllFields());
System.out.println("BLock Number :" + arg0.getBlockNumber());
System.out.println("THis is buyer Listener..");
}
};
channel.registerBlockListener(blockListener);
无论您将在received方法中写入什么,只要将块添加到区块链中,就会调用该方法。
希望这对您有所帮助。对于事务事件,您需要另一个侦听器:
String chaincodeEventListenerHandle = channel.registerChaincodeEventListener(
Pattern.compile(".*"), Pattern.compile(Pattern.quote(EXPECTED_EVENT_NAME)),
(handle, blockEvent, chaincodeEvent) -> {
final String es = blockEvent.getPeer() != null
? blockEvent.getPeer().getName()
: blockEvent.getEventHub().getName();
System.out.format(
"Chaincode event with handle: %s"
+ ", thread name: %s"
+ ", chaincode Id: %s"
+ ", chaincode event name: %s"
+ ", transaction id: %s"
+ ", event payload: \"%s\""
+ ", from eventhub: %s\n",
Thread.currentThread().getName(),
handle,
chaincodeEvent.getChaincodeId(),
chaincodeEvent.getEventName(),
chaincodeEvent.getTxId(),
new String(chaincodeEvent.getPayload()),
es);
});
...
channel.unregisterChaincodeEventListener(chaincodeEventListenerHandle);
对于事务事件,您需要另一个侦听器:
String chaincodeEventListenerHandle = channel.registerChaincodeEventListener(
Pattern.compile(".*"), Pattern.compile(Pattern.quote(EXPECTED_EVENT_NAME)),
(handle, blockEvent, chaincodeEvent) -> {
final String es = blockEvent.getPeer() != null
? blockEvent.getPeer().getName()
: blockEvent.getEventHub().getName();
System.out.format(
"Chaincode event with handle: %s"
+ ", thread name: %s"
+ ", chaincode Id: %s"
+ ", chaincode event name: %s"
+ ", transaction id: %s"
+ ", event payload: \"%s\""
+ ", from eventhub: %s\n",
Thread.currentThread().getName(),
handle,
chaincodeEvent.getChaincodeId(),
chaincodeEvent.getEventName(),
chaincodeEvent.getTxId(),
new String(chaincodeEvent.getPayload()),
es);
});
...
channel.unregisterChaincodeEventListener(chaincodeEventListenerHandle);
谢谢这个例子。然后如何处理添加到块中每个事务中的链码事件?感谢这个示例。然后如何处理添加到块中每个事务的链码事件?