4.7.7 Hyperledger Fabric - 应用程序开发 - 应用程序设计元素 - 连接选项

应用程序开发 - 应用程序设计元素 - 连接选项

连接选项与连接配置文件一起使用,以精确控制网关与网络的交互方式。使用网关可以使应用程序专注于业务逻辑,而不是网络拓扑。

在本主题中,我们将介绍:

  • 为什么连接选项很重要
  • 应用程序如何使用连接选项
  • 每个连接选项的作用
  • 何时使用特定的连接选项

1. 场景

连接选项指定网关行为的特定方面。网关之所以重要,其原因有很多,首要原因是允许应用程序专注于业务逻辑和智能合约,同时管理与网络中许多组件的交互。

image

连接选项控制行为的不同交互点。这些选项在本文中进行了详细说明。

连接选项的一个示例可能是指定 issue 应用程序使用的网关应使用身份 Isabella 来向 papernet 网络提交交易。另一个可能是网关应等待 MagnetoCorp 的所有三个对端节点来确认已提交交易以返回控制。连接选项允许应用程序指定网关与网络交互的精确行为。没有网关,应用程序需要做更多的工作。网关可以节省你的时间,使你的应用程序更具可读性,并且不易出错。

2. 使用

稍后我们将介绍应用程序可用的 全套连接选项;我们首先来看一下示例 MagnetoCorp issue 应用程序如何指定它们:

const userName = 'User1@org1.example.com';
const wallet = new FileSystemWallet('../identity/user/isabella/wallet');

const connectionOptions = {
  identity: userName,
  wallet: wallet,
  eventHandlerOptions: {
    commitTimeout: 100,
    strategy: EventStrategies.MSPID_SCOPE_ANYFORTX
    }
  };

await gateway.connect(connectionProfile, connectionOptions);

了解 identitywallet 选项如何是 connectionOptions 对象的简单属性。它们分别具有值 userNamewallet,这是在代码的前面设置的。将这些选项与 eventHandlerOptions 选项进行比较,后者本身就是一个对象。它具有两个属性:commitTimeout : 100 (以秒为单位) 和 strategy: EventStrategies.MSPID_SCOPE_ANYFORTX

了解如何将 connectionOptions 作为 connectionProfile 的补充传递到网关。网络由连接配置文件标识,选项精确指定网关应如何与之交互。现在让我们看看可用的选项。

3. 选项

以下是可用选项及其作用的列表。

  • wallet 标识网关将代表应用程序使用的钱包。见 互动 1;钱包是由应用程序指定的,但实际上是从中检索身份的网关。

    必须指定一个钱包;最重要的决定是要使用的钱包 类型,是文件系统,内存,HSM 还是数据库。

  • identity 是应用程序将从钱包中使用的用户身份。见相互作用 2a。用户身份由应用程序指定,代表应用程序的用户 Isabella,2b。身份实际上是由网关检索的。

    在我们的示例中,不同 MSP (2c, 2d) 将使用 Isabella 的身份来标识她来自 MagnetoCorp,并在其中扮演特定角色。这两个事实将相应地确定她对资源的许可,例如能够读取和写入帐本。

    必须指定用户身份。如你所见,此身份对于 Hyperledger Fabric 是一个准入制的网络这一观念至关重要 - 所有参与者都具有一个身份,包括应用程序,对端节点和交易排序器,这些身份决定了他们对资源的控制。你可以在 MSP 主题 中阅读有关此想法的更多信息。

  • clientTlsIdentity 是从钱包 (3a) 检索并用于网关和不同通道组件 (例如对端节点和交易排序器) 之间的安全通信 (3b) 的身份。

    请注意,此身份不同于用户身份。尽管 clientTlsIdentity 对于安全通信很重要,但它不如用户身份那么基础,因为它的范围不会超出安全网络通信的范围。

    clientTlsIdentity 是可选的。建议你在生产环境中进行设置。你应该始终使用其他 clientTlsIdentity 来标识,因为这些标识具有不同的含义和生命周期。例如,如果你的 clientTlsIdentity 受到威胁,那么你的身份也会受到威胁;将它们分开可以更安全。

  • eventHandlerOptions.commitTimeout 是可选的。它以秒为单位指定在将控制权返回给应用程序之前,网关应等待任何对端节点 (4a) 提交交易的最长时间。用于通知的对端节点集由 eventHandlerOptions.strategy 选项确定。如果未指定 commitTimeout,则网关将使用 300 秒的超时。

  • eventHandlerOptions.strategy 是可选的。它标识网关应用于侦听交易已提交的通知的对端节点的集合。例如,是侦听组织中的单个对端节点还是所有对端节点。它可以采用以下值之一:

    • EventStrategies.MSPID_SCOPE_ANYFORTX 侦听用户组织内的任何对端节点。在我们的示例中,请参见交互点 4b。MagnetoCorp 的 peer 1,peer 2 或 peer 3 中的任何一个都可以通知网关。

    • EventStrategies.MSPID_SCOPE_ALLFORTX 这是默认值。聆听用户组织内的所有对端节点。在我们的对端节点示例中,请参见交互点 4b。MagnetoCorp 的所有对端节点都必须已通知网关。peer 1,peer 2 和 peer 3。仅当对端节点是已知/发现且可用时,才对对端节点进行计数;不包括已停止或已失败的对端节点。

    • EventStrategies.NETWORK_SCOPE_ANYFORTX 侦听整个网络通道中的任何对端节点。在我们的示例中,请参见交互点 4b 和 4c。 MagnetoCorp 的 peer 1-3 或 DigiBank 的 peer 7-9 中的任何一个都可以通知网关。

    • EventStrategies.NETWORK_SCOPE_ALLFORTX 侦听整个网络通道中的所有对端节点。在我们的示例中,请参见交互点 4b 和 4c。 MagnetoCorp 和 DigiBank 的所有对端节点都必须通知网关;peer 1-3 和 peer 7-9。仅当已知/发现并可用时,才统计对端节点;不包括已停止或已失败的对端节点。

    • <PluginEventHandlerFunction> 用户定义的事件处理程序的名称。这允许用户定义自己的事件处理逻辑。了解如何 定义 插件事件处理程序,并检查 示例处理程序

      仅当你有非常特定的事件处理要求时,才需要用户定义的事件处理程序。通常,内置事件策略之一就足够了。用户定义的事件处理程序的一个示例可能是等待组织中超过一半的对端节点来确认交易已提交。

      如果确实指定了用户定义的事件处理程序,则它不会影响你的应用程序逻辑。它与此完全不同。 SDK 在处理过程中会调用处理程序;它决定何时调用它,并使用其结果选择要用于事件通知的对端节点。 SDK 完成处理后,应用程序将收到控制权。

      如果未指定用户定义的事件处理程序,则使用 EventStrategies 的默认值。

  • discovery.enabled 是可选的,可能的值为 true 或 false。默认值为 true。它确定网关是否使用服务发现来扩展连接配置文件中指定的网络拓扑。参见交互点 6;网关使用的对端节点 gossip 信息。

    此值将被 INITIALIIZE-WITH-DISCOVERY 环境变量覆盖,该变量可以设置为 true 或 false。

  • discovery.asLocalhost 是可选的,可能的值为 true 或 false。默认值为 true。它确定是否将在服务发现期间找到的 IP 地址从 docker 网络转换为本地主机。

    通常,开发人员会编写使用 docker 容器作为其网络组件 (例如对端节点,交易排序器和 CA) 的应用程序,但这些应用程序本身不会在 docker 容器中运行。这就是默认值为 true 的原因。在生产环境中,应用程序可能会以与网络组件相同的方式在docker 容器中运行,因此不需要地址转换。在这种情况下,应用程序应显式指定 false 或使用环境变量替代。

    此值将被 DISCOVERY-AS-LOCALHOST 环境变量覆盖,该变量可以设置为 true 或 false。

4. 注意事项

下面的注意事项列表在决定如何选择连接选项时会很有帮助。

  • eventHandlerOptions.commitTimeouteventHandlerOptions.strategy 一起工作。例如,commitTimeout: 100strategy: EventStrategies.MSPID_SCOPE_ANYFORTX 意味着网关将等待长达 100 秒的时间,以便任何对端节点确认交易已提交。相反,指定 strategy: EventStrategies.NETWORK_SCOPE_ALLFORTX 意味着网关将对所有组织中的所有对端节点最多等待 100 秒。

  • eventHandlerOptions.strategy 的默认值:EventStrategies.MSPID_SCOPE_ALLFORTX 将等待应用程序组织中的所有对端节点提交交易。这是一个很好的默认设置,因为应用程序可以确保其所有对端节点都拥有账本的最新副本,从而最大程度地减少了并发 问题

    但是,随着组织中对端节点数目的增加,等待所有对端节点变得有点不必要,在这种情况下,使用可插入事件处理程序可以提供更有效的策略。例如,在共识将使所有帐本保持同步的安全假设下,可以使用相同的一组对端节点来提交交易和侦听通知。

  • 服务发现需要设置 clientTlsIdentity。这是因为与应用程序交换信息的对端节点必须确信他们正在与自己信任的对端节点交换信息。如果未设置 clientTlsIdentity,则无论是否设置,都将不遵循发现。

  • 尽管应用程序可以在连接到网关时设置连接选项,但是管理员可能需要覆盖这些选项。这是因为选项与网络交互有关,而交互可能随时间而变化。例如,管理员试图了解使用服务发现对网络性能的影响。

    一种好的方法是在配置文件中定义应用程序替代,当应用程序配置其与网关的连接时,该配置文件将由应用程序读取。

    由于管理员最经常需要覆盖启用发现功能和 asLocalHost,因此为了方便起见,提供了环境变量 INITIALIIZE-WITH-DISCOVERYDISCOVERY-AS-LOCALHOST。管理员应在应用程序的生产运行时环境中设置这些设置,该环境很可能是 docker 容器。

Reference

项目源代码

项目源代码会逐步上传到 Github,地址为 https://github.com/windstamp

Contributor

  1. Windstamp, https://github.com/windstamp
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容