交易收据处理器
默认情况下,当web3j向以太坊客户端提交新的交易时,web3j将继续轮询客户端直到收据到TransactionReceipt,指示交易已被添加提交到区块链上。如果你用web3j异步发送多个交易,则这会导致多个线程同时轮询客户端。
为了减少这种轮询开销,web3j提供可配置的交易收据处理器TransactionReceiptProcessors。
在web3j中提供了多个处理器:
- PollingTransactionReceiptProcessor轮询交易收据处理器是web3j中使用的默认处理器,它定期为每个未决交易的交易收据进行轮询。
- QueuingTransactionReceiptProcessor排队交易收据处理器具有所有挂起的交易的内部队列。它包含一个定期运行以查询交易收据是否可用的worker。如果找到了收据,则调用客户端的回调。
- NoOpProcessor向客户端只提供交易hash,提供了一个EmptyTransactionReceipt。这是为不希望web3j对交易收据进行任何轮询的客户端使用的。
注意:在排队交易收据处理器的初始响应中也提供了EmptyTransactionReceipt
。这允许调用方对提交到网络的交易拥有交易哈希。
如果你不希望使用默认处理器PollingTransactionReceiptProcessor
,则可以指定交易收据处理器代码如下:
TransactionReceiptProcessor transactionReceiptProcessor =
new QueuingTransactionReceiptProcessor(web3j, new Callback() {
@Override
public void accept(TransactionReceipt transactionReceipt) {
// process transactionReceipt
}
@Override
public void exception(Exception exception) {
// handle exception
}
TransactionManager transactionManager = new RawTransactionManager(
web3j, credentials, ChainId.MAIN_NET, transactionReceiptProcessor);
如果你需要进一步的信息,FastRawTransactionManagerIT演示轮询和排队方法。