连接配置文件
受众:建筑师,应用程序和智能合约开发人员
连接配置文件描述了一组组件,包括Hyperledger Fabric区块链网络中的对等方,订购者和证书颁发机构。它还包含与这些组件有关的渠道和组织信息。应用程序主要使用连接配置文件来配置处理所有网络交互的 网关,从而使其能够专注于业务逻辑。连接配置文件通常由了解网络拓扑的管理员创建。
在本主题中,我们将介绍:
情境
连接配置文件用于配置网关。网关之所以重要,有 很多原因,主要是简化应用程序与网络通道的交互。
发行和购买这两个应用程序使用配置有连接配置文件1&2的网关1&2。每个配置文件都描述了MagnetoCorp和DigiBank网络组件的不同子集。每个连接配置文件都必须包含足够的信息,以使网关能够代表发行与网络交互并购买应用程序。请参阅文本以获取详细说明。
连接配置文件包含对网络视图的描述,以技术语法表示,可以是JSON或YAML。在本主题中,我们使用YAML表示形式,因为它使您更容易阅读。静态网关比动态网关需要更多的信息,因为动态网关可以使用服务发现来动态扩展连接配置文件中的信息。
连接配置文件不应该是网络通道的详尽描述。它只需要包含足够的信息即可使用它的网关。在上面的网络中,连接配置文件1需要至少包含用于issue
交易的认可组织和对等方,以及标识将在事务已提交到分类帐时通知网关的对等方。
将连接配置文件描述为描述网络视图最简单。它可能是一个全面的视图,但是由于以下几个原因,这是不现实的:
- 根据需要添加和删除对等方,订购者,证书颁发机构,渠道和组织。
- 组件可能会启动和停止,或者发生意外故障(例如断电)。
- 网关不需要整个网络的视图,例如仅需要成功处理事务提交或事件通知所需的视图。
- 服务发现可以扩充连接配置文件中的信息。具体来说,可以使用最少的Fabric拓扑信息来配置动态网关。其余的可以发现。
静态连接配置文件通常由详细了解网络拓扑的管理员创建。这是因为静态配置文件可以包含很多信息,并且管理员需要在相应的连接配置文件中捕获此信息。相反,动态配置文件将所需的定义量减到最少,因此对于想要快速上手的开发人员或想要创建响应速度更快的网关的管理员来说,是一个更好的选择。使用所选的编辑器以YAML或JSON格式创建连接配置文件。
用法
稍后我们将介绍如何定义连接配置文件。让我们首先看看示例MagnetoCorp issue
应用程序如何使用它:
const yaml = require('js-yaml');
const { Gateway } = require('fabric-network');
const connectionProfile = yaml.safeLoad(fs.readFileSync('../gateway/paperNet.yaml', 'utf8'));
const gateway = new Gateway();
await gateway.connect(connectionProfile, connectionOptions);
加载了一些必需的类之后,请查看如何paperNet.yaml
从文件系统加载网关文件,如何使用yaml.safeLoad()
方法将其转换为JSON对象 ,以及如何使用其connect()
方法来配置网关。
通过使用此连接配置文件配置网关,发行应用程序将为网关提供应用于处理事务的相关网络拓扑。这是因为连接配置文件包含有关PaperNet渠道,组织,对等方,订购者和CA的足够信息,以确保可以成功处理交易。
对于任何给定的组织,连接概要文件都定义一个以上的对等体是一个好习惯-它可以防止单点故障。这种做法也适用于动态网关。为服务发现提供多个起点。
DigiBank buy
应用程序通常会将其网关配置为具有类似的连接配置文件,但有一些重要的区别。有些元素是相同的,例如通道;有些元素会重叠,例如背书的同伴。其他元素将完全不同,例如通知对等方或证书颁发机构。
该connectionOptions
传递给网关配合连接配置文件。它们允许应用程序声明网关如何使用连接配置文件。SDK会对它们进行解释,以控制与网络组件的交互模式,例如选择要与之连接的身份或用于事件通知的对等实体。阅读 有关可用连接选项的列表以及何时使用它们的信息。
结构体
为了帮助您了解连接配置文件的结构,我们通过对显示的网络的例子要步以上。它的连接配置文件基于PaperNet商业论文样本,并 存储 在GitHub存储库中。为了方便起见,我们在下面复制了它。现在,您会发现将其显示在另一个浏览器窗口中很有帮助:
-
第9行:
name: "papernet.magnetocorp.profile.sample"
这是连接配置文件的名称。尝试使用DNS样式名称;它们是传达意义的非常简单的方法。
-
第16行:
x-type: "hlfv1"
用户可以添加自己的
x-
“特定于应用程序” 的属性,就像使用HTTP标头一样。它们主要提供给将来使用。 -
第20行:
description: "Sample connection profile for documentation topic"
连接配置文件的简短描述。尝试使此功能对可能是第一次看到此内容的读者有所帮助!
-
第25行:
version: "1.0"
此连接配置文件的架构版本。当前仅支持1.0版,并且没有预见到该架构会经常更改。
-
第32行:
channels:
这是第一条真正重要的线。
channels:
标识此连接配置文件描述的所有通道如下。但是,优良作法是将不同的通道保留在不同的连接配置文件中,尤其是当它们彼此独立使用时。 -
第36行:
papernet:
有关
papernet
此连接配置文件中第一个频道的详细信息,将在后面介绍。 -
第41行:
orderers:
所有订购者的详细信息,请
papernet
关注。您可以在第45行看到此频道的订购者为orderer1.magnetocorp.example.com
。这只是一个逻辑名称;稍后在连接配置文件(第134-147行)中,将详细介绍如何连接到此订购器。注意,orderer2.digibank.example.com
它不在此列表中。应用程序使用自己组织的订购者,而不是其他组织的订购者,这是有道理的。 -
第49行:
peers:
所有同行的详细信息
papernet
如下。你可以看到从MagnetoCorp列出了三个同行:
peer1.magnetocorp.example.com
,peer2.magnetocorp.example.com
和peer3.magnetocorp.example.com
。不必像这里所做的那样列出MagnetoCorp中的所有对等方。你可以看到从DigiBank上市仅一个对等体peer9.digibank.example.com
; 现在我们将确认,包括该同行在内的其他人开始暗示认可政策要求MagnetoCorp和DigiBank认可交易。最好有多个同级,以避免单点故障。下面每个对等,你可以看到四个非排他性的角色:endorsingPeer, chaincodeQuery,ledgerQuery和EventSource的。了解他们如何
peer1
以及 如何peer2
担任所有角色papercontract
。与相比peer3
,只能用于通知或访问分类账的区块链组件而不是世界状态的分类账查询,因此不需要安装智能合约。请注意peer9
,除了背书之外,不应将其用于其他任何用途,因为MagnetoCorp的同行可以更好地担当这些角色。再次,看看如何根据其逻辑名称和角色来描述对等体。在配置文件的后面,我们将看到这些对等方的物理信息。
-
第97行:
organizations:
所有组织的详细信息将在所有渠道中显示。请注意,尽管
papernet
目前是唯一列出的组织,但这些组织适用于所有渠道。这是因为组织可以位于多个渠道中,并且渠道可以具有多个组织。而且,某些应用程序操作与组织有关,而不是与渠道有关。例如,应用程序可以使用连接选项从其组织内的一个或所有对等方或网络内的所有组织请求通知。为此,需要一个组织到对等方的映射,本节将提供它。 -
第101行:
MagnetoCorp:
被认为MagnetoCorp的一部分,所有的同行都列出:
peer1
,peer2
和peer3
。证书颁发机构也是如此。再次,注意逻辑名称的用法,与本channels:
节相同;物理信息将在配置文件的后面。 -
第121行:
DigiBank:
仅
peer9
列出为DigiBank的一部分,没有证书颁发机构。这是因为这些其他对等方和DigiBank CA与该连接配置文件的用户无关。 -
第134行:
orderers:
现在列出了订购者的物理信息。由于此连接配置文件仅提及的一个订购者
papernet
,因此您会看到orderer1.magnetocorp.example.com
列出的详细信息。其中包括其IP地址和端口,以及gRPC选项,可以在需要时覆盖与订购者进行通信时使用的默认值。与一样peers:
,对于高可用性,指定多个订购者是一个好主意。 -
第152行:
peers:
现在列出了所有先前对等方的物理信息。此连接配置文件有三个同行的MagnetoCorp: ,
peer1
,peer2
和peer3
; 对于DigiBank,单个同级peer9
列出了其信息。对于每个对等方,如订购者一样,将列出其IP地址和端口以及gRPC选项,这些选项可以覆盖与特定对等方进行通信时使用的默认值(如有必要)。 -
194行:
certificateAuthorities:
现在列出了证书颁发机构的物理信息。连接配置文件为MagnetoCorp列出了一个CA
ca1-magnetocorp
,其物理信息如下。除了IP详细信息之外,注册商信息还允许将此CA用于证书签名请求(CSR)。这些用于请求本地生成的公用/专用密钥对的新证书。
现在,您已经了解了MagnetoCorp的连接配置文件,您可能希望查看 DigiBank 的 相应配置文件。找到该配置文件与MagnetoCorp的配置文件相同的地方,查看其相似之处,最后是不同的地方。考虑一下为什么这些差异对于DigiBank应用程序有意义。
这就是您需要了解的有关连接配置文件的所有内容。总之,连接配置文件为应用程序定义了足够的通道,组织,对等方,订购者和证书颁发机构,以配置网关。网关允许应用程序专注于业务逻辑,而不是网络拓扑的细节。
样品
该文件是从GitHub商业文件样本中直接复制的 。
---
#
# [Required]. A connection profile contains information about a set of network
# components. It is typically used to configure gateway, allowing applications
# interact with a network channel without worrying about the underlying
# topology. A connection profile is normally created by an administrator who
# understands this topology.
#
name: "papernet.magnetocorp.profile.sample"
#
# [Optional]. Analogous to HTTP, properties with an "x-" prefix are deemed
# "application-specific", and ignored by the gateway. For example, property
# "x-type" with value "hlfv1" was originally used to identify a connection
# profile for Fabric 1.x rather than 0.x.
#
x-type: "hlfv1"
#
# [Required]. A short description of the connection profile
#
description: "Sample connection profile for documentation topic"
#
# [Required]. Connection profile schema version. Used by the gateway to
# interpret these data.
#
version: "1.0"
#
# [Optional]. A logical description of each network channel; its peer and
# orderer names and their roles within the channel. The physical details of
# these components (e.g. peer IP addresses) will be specified later in the
# profile; we focus first on the logical, and then the physical.
#
channels:
#
# [Optional]. papernet is the only channel in this connection profile
#
papernet:
#
# [Optional]. Channel orderers for PaperNet. Details of how to connect to
# them is specified later, under the physical "orderers:" section
#
orderers:
#
# [Required]. Orderer logical name
#
- orderer1.magnetocorp.example.com
#
# [Optional]. Peers and their roles
#
peers:
#
# [Required]. Peer logical name
#
peer1.magnetocorp.example.com:
#
# [Optional]. Is this an endorsing peer? (It must have chaincode
# installed.) Default: true
#
endorsingPeer: true
#
# [Optional]. Is this peer used for query? (It must have chaincode
# installed.) Default: true
#
chaincodeQuery: true
#
# [Optional]. Is this peer used for non-chaincode queries? All peers
# support these types of queries, which include queryBlock(),
# queryTransaction(), etc. Default: true
#
ledgerQuery: true
#
# [Optional]. Is this peer used as an event hub? All peers can produce
# events. Default: true
#
eventSource: true
#
peer2.magnetocorp.example.com:
endorsingPeer: true
chaincodeQuery: true
ledgerQuery: true
eventSource: true
#
peer3.magnetocorp.example.com:
endorsingPeer: false
chaincodeQuery: false
ledgerQuery: true
eventSource: true
#
peer9.digibank.example.com:
endorsingPeer: true
chaincodeQuery: false
ledgerQuery: false
eventSource: false
#
# [Required]. List of organizations for all channels. At least one organization
# is required.
#
organizations:
#
# [Required]. Organizational information for MagnetoCorp
#
MagnetoCorp:
#
# [Required]. The MSPID used to identify MagnetoCorp
#
mspid: MagnetoCorpMSP
#
# [Required]. The MagnetoCorp peers
#
peers:
- peer1.magnetocorp.example.com
- peer2.magnetocorp.example.com
- peer3.magnetocorp.example.com
#
# [Optional]. Fabric-CA Certificate Authorities.
#
certificateAuthorities:
- ca-magnetocorp
#
# [Optional]. Organizational information for DigiBank
#
DigiBank:
#
# [Required]. The MSPID used to identify DigiBank
#
mspid: DigiBankMSP
#
# [Required]. The DigiBank peers
#
peers:
- peer9.digibank.example.com
#
# [Optional]. Orderer physical information, by orderer name
#
orderers:
#
# [Required]. Name of MagnetoCorp orderer
#
orderer1.magnetocorp.example.com:
#
# [Required]. This orderer's IP address
#
url: grpc://localhost:7050
#
# [Optional]. gRPC connection properties used for communication
#
grpcOptions:
ssl-target-name-override: orderer1.magnetocorp.example.com
#
# [Required]. Peer physical information, by peer name. At least one peer is
# required.
#
peers:
#
# [Required]. First MagetoCorp peer physical properties
#
peer1.magnetocorp.example.com:
#
# [Required]. Peer's IP address
#
url: grpc://localhost:7151
#
# [Optional]. gRPC connection properties used for communication
#
grpcOptions:
ssl-target-name-override: peer1.magnetocorp.example.com
request-timeout: 120001
#
# [Optional]. Other MagnetoCorp peers
#
peer2.magnetocorp.example.com:
url: grpc://localhost:7251
grpcOptions:
ssl-target-name-override: peer2.magnetocorp.example.com
request-timeout: 120001
#
peer3.magnetocorp.example.com:
url: grpc://localhost:7351
grpcOptions:
ssl-target-name-override: peer3.magnetocorp.example.com
request-timeout: 120001
#
# [Required]. Digibank peer physical properties
#
peer9.digibank.example.com:
url: grpc://localhost:7951
grpcOptions:
ssl-target-name-override: peer9.digibank.example.com
request-timeout: 120001
#
# [Optional]. Fabric-CA Certificate Authority physical information, by name.
# This information can be used to (e.g.) enroll new users. Communication is via
# REST, hence options relate to HTTP rather than gRPC.
#
certificateAuthorities:
#
# [Required]. MagnetoCorp CA
#
ca1-magnetocorp:
#
# [Required]. CA IP address
#
url: http://localhost:7054
#
# [Optioanl]. HTTP connection properties used for communication
#
httpOptions:
verify: false
#
# [Optional]. Fabric-CA supports Certificate Signing Requests (CSRs). A
# registrar is needed to enroll new users.
#
registrar:
- enrollId: admin
enrollSecret: adminpw
#
# [Optional]. The name of the CA.
#
caName: ca-magnetocorp
连接选项
受众:架构师,管理员,应用程序和智能合约开发人员
连接选项与连接配置文件一起使用,以精确控制 网关与网络的交互方式。使用网关可以使应用程序专注于业务逻辑,而不是网络拓扑。
在本主题中,我们将介绍:
情境
连接选项指定网关行为的特定方面。网关之所以重要,有很多原因,主要是允许应用程序专注于业务逻辑和智能合约,同时管理与网络许多组件的交互。
[图片上传中...(image-9fd4ad-1575018452518-0)]
连接选项控制行为的不同交互点。这些选项在本文中进行了详细说明。
连接选项的一个示例可能是指定issue
应用程序使用的网关应使用身份Isabella
向papernet
网络提交事务。另一个可能是网关应等待MagnetoCorp的所有三个节点来确认已提交事务以返回控制。连接选项允许应用程序指定网关与网络交互的精确行为。没有网关,应用程序需要做更多的工作。网关可以节省您的时间,使您的应用程序更具可读性,并且不易出错。
用法
稍后我们将描述可用于应用程序的全套连接选项。让我们首先看看示例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);
查看identity
和wallet
选项如何成为connectionOptions
对象的简单属性 。它们 分别具有值userName
和wallet
,这些值在代码的前面设置。将这些选项与eventHandlerOptions
本身就是对象的选项进行对比。它具有两个属性:(以秒为单位)和。commitTimeout: 100``strategy: EventStrategies.MSPID_SCOPE_ANYFORTX
了解如何connectionOptions
传递给网关以作为对它的补充 connectionProfile
;网络由连接配置文件标识,选项精确指定网关应如何与之交互。现在让我们看看可用的选项。
选件
这是可用选项及其作用的列表。
-
wallet
标识网关将代表应用程序使用的钱包。见互动1 ; 钱包是由应用程序指定的,但实际上是从中检索身份的网关。必须指定一个钱包;最重要的决定是 要使用的钱包类型,是文件系统,内存,HSM还是数据库。
-
identity
是应用程序将使用的用户身份wallet
。见互动2a ; 用户身份由应用程序指定,代表应用程序的用户Isabella,2b。身份实际上是由网关检索的。在我们的示例中,不同MSP(2c, 2d)将使用Isabella的身份来标识她来自MagnetoCorp,并在其中具有特定角色。这两个事实将相应地确定她对资源的许可,例如能够读取和写入分类帐。
必须指定用户身份。如您所见,此身份对于Hyperledger Fabric是一个允许的网络这一观念至关重要-所有参与者都具有一个身份,包括应用程序,对等方和订购者,这些身份决定了他们对资源的控制。您可以在会员服务主题中阅读有关此想法的更多信息。
-
clientTlsIdentity
是从钱包(3a)检索并用于网关和不同通道组件(例如对等设备和订购者)之间的安全通信(3b)的身份。请注意,此身份不同于用户身份。尽管
clientTlsIdentity
对于安全通信很重要,但它不如用户身份那么基础,因为它的范围不会超出安全网络通信的范围。clientTlsIdentity
是可选的。建议您在生产环境中进行设置。您应该始终使用clientTlsIdentity
,identity
因为这些身份具有不同的含义和生命周期。例如,如果您clientTlsIdentity
受到了损害,那么您的也会受到损害identity
。将它们分开可以更安全。 eventHandlerOptions.commitTimeout
是可选的。它以秒为单位指定在将控制权返回给应用程序之前,网关应等待任何对等方(4a)提交事务的最长时间。用于通知的对等体集由该eventHandlerOptions.strategy
选项确定 。如果未指定commitTimeout,则网关将使用300秒的超时。-
eventHandlerOptions.strategy
是可选的。它标识网关应用于侦听事务已提交的通知的对等体的集合。例如,是侦听组织中的单个对等方还是所有对等方。它可以采用以下值之一:EventStrategies.MSPID_SCOPE_ANYFORTX
侦听用户组织内的任何同级。在我们的示例中,请参见交互点4b;MagnetoCorp的对等体1,对等体2或对等体3中的任何一个都可以通知网关。EventStrategies.MSPID_SCOPE_ALLFORTX
这是默认值。监听用户组织内的所有对等方。在我们的对等示例中,请参见交互点4b。MagnetoCorp的所有对等方都必须已通知网关。对等体1,对等体2和对等体3。仅当对等体是已知/发现且可用时,才对等体进行计数;不包括已停止或已失败的对等体。EventStrategies.NETWORK_SCOPE_ANYFORTX
侦听整个网络通道中的任何对等方。在我们的示例中,请参见交互点4b和 4c;MagnetoCorp的对等1-3或DigiBank的对等7-9中的任何一个都可以通知网关。EventStrategies.NETWORK_SCOPE_ALLFORTX
侦听整个网络通道中的所有对等方。在我们的示例中,请参见交互点4b和 4c。MagnetoCorp和DigiBank的所有同级都必须通知网关;对等1-3和对等7-9。仅当已知/发现并可用时,才对等;不包括已停止或已失败的对等体。-
<
PluginEventHandlerFunction
>用户定义的事件处理程序的名称。这允许用户定义自己的事件处理逻辑。了解如何 定义 插件事件处理程序,并检查样本处理程序。仅当您有非常特定的事件处理要求时,才需要用户定义的事件处理程序。通常,内置事件策略之一就足够了。用户定义的事件处理程序的一个示例可能是等待组织中超过一半的对等方来确认事务已提交。
如果确实指定了用户定义的事件处理程序,则它不会影响您的应用程序逻辑。它与此完全不同。SDK在处理过程中会调用处理程序;它决定何时调用它,并使用其结果选择要用于事件通知的同级。SDK完成处理后,应用程序将收到控制权。
如果未指定用户定义的事件处理程序,
EventStrategies
则使用的默认值 。
-
discovery.enabled
是可选的,并且可能具有true
或值false
。默认值为true
。它确定网关是否使用服务发现来扩展连接配置文件中指定的网络拓扑。见相互作用点6 ; 网关使用的对等八卦信息。该值将被
INITIALIIZE-WITH-DISCOVERY
环境变量覆盖,可以将其设置为true
或false
。 -
discovery.asLocalhost
是可选的,并且可能具有true
或值false
。默认值为true
。它确定是否将在服务发现期间找到的IP地址从docker网络转换为本地主机。通常,开发人员会编写使用docker容器作为其网络组件(例如对等方,订购者和CA)的应用程序,但这些应用程序本身不会在docker容器中运行。这就是
true
默认设置的原因;在生产环境中,应用程序可能会以与网络组件相同的方式在docker容器中运行,因此不需要地址转换。在这种情况下,应用程序应显式指定false
或使用环境变量替代。该值将被
DISCOVERY-AS-LOCALHOST
环境变量覆盖,可以将其设置为true
或false
。
注意事项
下面的注意事项列表在决定如何选择连接选项时会很有帮助。
eventHandlerOptions.commitTimeout
和eventHandlerOptions.strategy
一起工作。例如,并且意味着网关将等待长达100秒的任何同行,以确认交易已提交。相反,指定意味着网关将对所有 组织中的所有对等方最多等待100秒。commitTimeout: 100``strategy: EventStrategies.MSPID_SCOPE_ANYFORTX``strategy: EventStrategies.NETWORK_SCOPE_ALLFORTX
-
默认值将等待应用程序组织中的所有对等方提交事务。这是一个很好的默认设置,因为应用程序可以确保其所有对等方都拥有分类账的最新副本,从而最大程度地减少了并发 问题。
eventHandlerOptions.strategy: EventStrategies.MSPID_SCOPE_ALLFORTX
但是,随着组织中对等方数目的增加,等待所有对等方变得有点不必要,在这种情况下,使用可插入事件处理程序可以提供更有效的策略。例如,在共识将使所有分类帐保持同步的安全假设下,可以使用相同的一组对等点来提交交易和侦听通知。
需要
clientTlsIdentity
设置服务发现。这是因为与应用程序交换信息的对等方需要确信他们正在与自己信任的实体交换信息。如果clientTlsIdentity
未设置,则discovery
无论是否设置,都将不服从。-
尽管应用程序可以在连接到网关时设置连接选项,但是管理员可能需要覆盖这些选项。这是因为选项与网络交互有关,该交互可能随时间而变化。例如,管理员试图了解使用服务发现对网络性能的影响。
一种好的方法是在配置文件中定义应用程序替代,当应用程序配置其与网关的连接时,该配置文件将由应用程序读取。
由于发现选项
enabled
和asLocalHost
最经常需要由管理员覆盖,环境变量INITIALIIZE-WITH-DISCOVERY
,并DISCOVERY-AS-LOCALHOST
提供了方便。管理员应在应用程序的生产运行时环境中设置这些设置,该环境很可能是docker容器。
连接选项
受众:架构师,管理员,应用程序和智能合约开发人员
连接选项与连接配置文件一起使用,以精确控制 网关与网络的交互方式。使用网关可以使应用程序专注于业务逻辑,而不是网络拓扑。
在本主题中,我们将介绍:
情境
连接选项指定网关行为的特定方面。网关之所以重要,有很多原因,主要是允许应用程序专注于业务逻辑和智能合约,同时管理与网络许多组件的交互。
连接选项控制行为的不同交互点。这些选项在本文中进行了详细说明。
连接选项的一个示例可能是指定issue
应用程序使用的网关应使用身份Isabella
向papernet
网络提交事务。另一个可能是网关应等待MagnetoCorp的所有三个节点来确认已提交事务以返回控制。连接选项允许应用程序指定网关与网络交互的精确行为。没有网关,应用程序需要做更多的工作。网关可以节省您的时间,使您的应用程序更具可读性,并且不易出错。
用法
稍后我们将描述可用于应用程序的全套连接选项。让我们首先看看示例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);
查看identity
和wallet
选项如何成为connectionOptions
对象的简单属性 。它们 分别具有值userName
和wallet
,这些值在代码的前面设置。将这些选项与eventHandlerOptions
本身就是对象的选项进行对比。它具有两个属性:(以秒为单位)和。commitTimeout: 100``strategy: EventStrategies.MSPID_SCOPE_ANYFORTX
了解如何connectionOptions
传递给网关以作为对它的补充 connectionProfile
;网络由连接配置文件标识,选项精确指定网关应如何与之交互。现在让我们看看可用的选项。
选件
这是可用选项及其作用的列表。
-
wallet
标识网关将代表应用程序使用的钱包。见互动1 ; 钱包是由应用程序指定的,但实际上是从中检索身份的网关。必须指定一个钱包;最重要的决定是 要使用的钱包类型,是文件系统,内存,HSM还是数据库。
-
identity
是应用程序将使用的用户身份wallet
。见互动2a ; 用户身份由应用程序指定,代表应用程序的用户Isabella,2b。身份实际上是由网关检索的。在我们的示例中,不同MSP(2c, 2d)将使用Isabella的身份来标识她来自MagnetoCorp,并在其中具有特定角色。这两个事实将相应地确定她对资源的许可,例如能够读取和写入分类帐。
必须指定用户身份。如您所见,此身份对于Hyperledger Fabric是一个允许的网络这一观念至关重要-所有参与者都具有一个身份,包括应用程序,对等方和订购者,这些身份决定了他们对资源的控制。您可以在会员服务主题中阅读有关此想法的更多信息。
-
clientTlsIdentity
是从钱包(3a)检索并用于网关和不同通道组件(例如对等设备和订购者)之间的安全通信(3b)的身份。请注意,此身份不同于用户身份。尽管
clientTlsIdentity
对于安全通信很重要,但它不如用户身份那么基础,因为它的范围不会超出安全网络通信的范围。clientTlsIdentity
是可选的。建议您在生产环境中进行设置。您应该始终使用clientTlsIdentity
,identity
因为这些身份具有不同的含义和生命周期。例如,如果您clientTlsIdentity
受到了损害,那么您的也会受到损害identity
。将它们分开可以更安全。 eventHandlerOptions.commitTimeout
是可选的。它以秒为单位指定在将控制权返回给应用程序之前,网关应等待任何对等方(4a)提交事务的最长时间。用于通知的对等体集由该eventHandlerOptions.strategy
选项确定 。如果未指定commitTimeout,则网关将使用300秒的超时。-
eventHandlerOptions.strategy
是可选的。它标识网关应用于侦听事务已提交的通知的对等体的集合。例如,是侦听组织中的单个对等方还是所有对等方。它可以采用以下值之一:EventStrategies.MSPID_SCOPE_ANYFORTX
侦听用户组织内的任何同级。在我们的示例中,请参见交互点4b;MagnetoCorp的对等体1,对等体2或对等体3中的任何一个都可以通知网关。EventStrategies.MSPID_SCOPE_ALLFORTX
这是默认值。监听用户组织内的所有对等方。在我们的对等示例中,请参见交互点4b。MagnetoCorp的所有对等方都必须已通知网关。对等体1,对等体2和对等体3。仅当对等体是已知/发现且可用时,才对等体进行计数;不包括已停止或已失败的对等体。EventStrategies.NETWORK_SCOPE_ANYFORTX
侦听整个网络通道中的任何对等方。在我们的示例中,请参见交互点4b和 4c;MagnetoCorp的对等1-3或DigiBank的对等7-9中的任何一个都可以通知网关。EventStrategies.NETWORK_SCOPE_ALLFORTX
侦听整个网络通道中的所有对等方。在我们的示例中,请参见交互点4b和 4c。MagnetoCorp和DigiBank的所有同级都必须通知网关;对等1-3和对等7-9。仅当已知/发现并可用时,才对等;不包括已停止或已失败的对等体。-
<
PluginEventHandlerFunction
>用户定义的事件处理程序的名称。这允许用户定义自己的事件处理逻辑。了解如何 定义 插件事件处理程序,并检查样本处理程序。仅当您有非常特定的事件处理要求时,才需要用户定义的事件处理程序。通常,内置事件策略之一就足够了。用户定义的事件处理程序的一个示例可能是等待组织中超过一半的对等方来确认事务已提交。
如果确实指定了用户定义的事件处理程序,则它不会影响您的应用程序逻辑。它与此完全不同。SDK在处理过程中会调用处理程序;它决定何时调用它,并使用其结果选择要用于事件通知的同级。SDK完成处理后,应用程序将收到控制权。
如果未指定用户定义的事件处理程序,
EventStrategies
则使用的默认值 。
-
discovery.enabled
是可选的,并且可能具有true
或值false
。默认值为true
。它确定网关是否使用服务发现来扩展连接配置文件中指定的网络拓扑。见相互作用点6 ; 网关使用的对等八卦信息。该值将被
INITIALIIZE-WITH-DISCOVERY
环境变量覆盖,可以将其设置为true
或false
。 -
discovery.asLocalhost
是可选的,并且可能具有true
或值false
。默认值为true
。它确定是否将在服务发现期间找到的IP地址从docker网络转换为本地主机。通常,开发人员会编写使用docker容器作为其网络组件(例如对等方,订购者和CA)的应用程序,但这些应用程序本身不会在docker容器中运行。这就是
true
默认设置的原因;在生产环境中,应用程序可能会以与网络组件相同的方式在docker容器中运行,因此不需要地址转换。在这种情况下,应用程序应显式指定false
或使用环境变量替代。该值将被
DISCOVERY-AS-LOCALHOST
环境变量覆盖,可以将其设置为true
或false
。
注意事项
下面的注意事项列表在决定如何选择连接选项时会很有帮助。
eventHandlerOptions.commitTimeout
和eventHandlerOptions.strategy
一起工作。例如,并且意味着网关将等待长达100秒的任何同行,以确认交易已提交。相反,指定意味着网关将对所有 组织中的所有对等方最多等待100秒。commitTimeout: 100``strategy: EventStrategies.MSPID_SCOPE_ANYFORTX``strategy: EventStrategies.NETWORK_SCOPE_ALLFORTX
-
默认值将等待应用程序组织中的所有对等方提交事务。这是一个很好的默认设置,因为应用程序可以确保其所有对等方都拥有分类账的最新副本,从而最大程度地减少了并发 问题。
eventHandlerOptions.strategy: EventStrategies.MSPID_SCOPE_ALLFORTX
但是,随着组织中对等方数目的增加,等待所有对等方变得有点不必要,在这种情况下,使用可插入事件处理程序可以提供更有效的策略。例如,在共识将使所有分类帐保持同步的安全假设下,可以使用相同的一组对等点来提交交易和侦听通知。
需要
clientTlsIdentity
设置服务发现。这是因为与应用程序交换信息的对等方需要确信他们正在与自己信任的实体交换信息。如果clientTlsIdentity
未设置,则discovery
无论是否设置,都将不服从。-
尽管应用程序可以在连接到网关时设置连接选项,但是管理员可能需要覆盖这些选项。这是因为选项与网络交互有关,该交互可能随时间而变化。例如,管理员试图了解使用服务发现对网络性能的影响。
一种好的方法是在配置文件中定义应用程序替代,当应用程序配置其与网关的连接时,该配置文件将由应用程序读取。
由于发现选项
enabled
和asLocalHost
最经常需要由管理员覆盖,环境变量INITIALIIZE-WITH-DISCOVERY
,并DISCOVERY-AS-LOCALHOST
提供了方便。管理员应在应用程序的生产运行时环境中设置这些设置,该环境很可能是docker容器。