Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hyperledger Java SDK客户端事件侦听器_Java_Sdk_Client_Event Listener_Hyperledger - Fatal编程技术网

Hyperledger Java SDK客户端事件侦听器

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

我有一个基于Java SDK的Hyperledger结构客户端,能够连接和发送交易建议请求,在分类账中创建条目并查询分类账

我正在努力注册和收听块和链码事件。我想在客户机上启动一个单独的线程,专门用于侦听和处理这些事件

到目前为止,我发现:

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);

谢谢这个例子。然后如何处理添加到块中每个事务中的链码事件?感谢这个示例。然后如何处理添加到块中每个事务的链码事件?