corda - Corda:在响应者流中发出 HTTP 请求?
问题描述
是否可以从响应程序流中向对方的外部服务发出 HTTP 请求?
我的用例是一方使用交换节点调用“请求令牌”流。该交换节点发出 HTTP 请求(在响应程序流上)以将现金从该方帐户转移到外部支付系统中的交换帐户。资金实际达到计数的事件以及因此代币的发行将在另一个流程中发生。
如果不行,有什么替代设计可以完成任务?
解决方案
以这种方式发出 HTTP 请求并不总是一个好主意。
除非您非常仔细地考虑重播前一个检查点时会发生什么。所以重复数据删除和幂等性是关键考虑因素。加上如果目标关闭会发生什么?此外,这可能会耗尽纤程运行的线程池。
流在纤维上运行。CordaServices 可以生成自己的线程,线程可以阻塞 I/O,纤程只能在短时间内这样做,我们不保证释放资源或排序,除非它是 DB。线程也可以注册可观察对象
真正的挑战是重启能力,为此他们需要通过随机杀戮来测试他们的代码。
您需要注意,在发生崩溃时可以重播步骤。这适用于任何重新启动工作的基于服务器端工作的系统。
实际上,您应该:
- 第 1 步)执行账本上的 Corda 交易以将一个或多个资产移动到锁定状态(类似于 XA 的“准备”)。公证成功后,
- 步骤 2) 使用成功或失败的幂等调用执行账外交易。当我们知道它是成功还是失败时,移动到
- 步骤 3) 执行第二个 Corda 交易,该交易要么恢复资产状态,要么将其移至预期的最终状态
推荐阅读
- laravel - 我是 Laravel 的初学者。我们如何解决这个问题?
- scala - scala 中 dropWhile 的结果是什么
- c++ - 将二维数组传递给函数以更改值
- javascript - 如何在 if 条件下使用“swiper.activeIndex”?
- javascript - 检查元素时如何隐藏div元素?
- java - 通过扩展自定义 HashMap
- sql-update - 在 WHERE 子句中使用类似 WINDOW 的函数对表进行 SQL 更新
- css - 为什么我的 Angular 应用程序加载时没有立即应用预期的 Material 按钮样式,只是稍后应用?
- c# - 使用反射在字符串列表中查找字符串
- ruby-on-rails - 在 Ruby on rails 5 上运行测试时出现未初始化的常量错误