connection options和connection profile一起使用,以精确控制网关与网络的交互方式。
1、用法
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);
2、选项
下面是可用选项以及作用的列表:
- wallet:网关从中获取身份
- identity:应用程序将会使用的来自wallet的user身份,user身份由应用程序指定,但实际上由网关检索。MSP将使用user的身份来标识来自哪一个组织并在其中具有什么特定角色。这两个事实将相应地确认她对资源的许可
- clientTlsIdentity:从wallet中检索得到,用于网关和不同通道组件安全通信的身份,这个身份是可选的,在生产环境中最好选择,最好将它与identity分离开
- eventHandlerOptions.commitTimeout:可选的,它以秒为单位指定在将控制权返回应用程序之前,网关应等待任何对等节点提交transaction的最长时间,用于通知的对等节点的集合由eventHandlerOptions.strategy选项决定,如果没有指定timeout的时间,网关将使用300s
- eventHandlerOptions.strategy:可选的,标识网关应用于监听transaction已提交的通知的对等节点的集合。例如,是监听组织中的单个对等方还是所有对等方。它可以采用以下值之一:
EventStrategies.MSPID_SCOPE_ANYFORTX:监听user组织内的任意peer(any)。
EventStrategies.MSPID_SCOPE_ALLFORTX:这是默认值,监听所有的user组织中的peer,要求组织中的每一个peer都要通知网关(停止的和失败的peer不计入其中)。
EventStrategies.NETWORK_SCOPE_ANYFORTX:监听整个网络通道中的任意peer(可以是其他组织的)。
EventStrategies.NETWORK_SCOPE_ALLFORTX:同上,监听所有的peer。
<PluginEventHandlerFunction>:用户自定义的事件处理程序的名字,用户可以定义自己的事件处理程序逻辑当有特殊的需求时(比如需要等一个组织中的大多数peers通知),一般来说默认的strategy已经够用了。
discovery.enabled:可选的,可能值为true或false,默认是true。决定网关是否使用服务发现来补充connection profile中指定的网络拓扑,这个值将会被能够设置为true或false的环境变量INITIALIZE-WITH-DISCOVERY替代。
discovery.asLocalhost:可选的,可能的值为true或者false,默认是true。它确定是否将在服务发现期间找到的IP地址从docker网络转换为本地主机。通常,开发者写的应用程序会为其网络组件使用docker containers,而自己本身不在容器中运行,因此默认值设置为true。而在生产环境中,应用也可能运行在容器中就和其他网络组件一样,因此地址转换就不需要了,这种情况下,应用程序需要明确指定false或者使用环境变量覆盖。这个值可以被可以设置成true或false的环境变量DISCOVERY-AS-LOCALHOST覆盖。
3、注意事项
- 将eventHandlerOptions.strategy:EventStrategies.MSPID_SCOPE_ALLFORTX作为默认值是很好的选择,因为可以使应用程序确认其组织所有节点都有了最新的账本副本,减少了开发中的错误。然而当一个组织中peers的数量增加的时候,等待所有的节点就没有必要了,这种情况下可以使用一个可插入时间处理程序提供一个更高效的策略。比如在提交transaction和监听通知时使用同一个对等节点集。
- Service discovery需要clientTlsIdentity被设定。因为于应用程序交换信息的对等方需要确信他们正与自己信任的实体交换信息,如果后者没有设置,那么无论前者设置与否,都不会服从。
- 应用程序可以在连接到网关时设置连接选项,但是管理员可能需要覆盖这些选项,因为选项与交互相关,交互可能随时间变化。一种好的办法是在配置文件中定义应用程序替代,当应用程序配置网关的时候会读取它。由于Discovery选项enabled和asLocalHost是管理员经常需要覆盖的选项,因此提供了环境变量以便于使用,管理员应在应用程序的生产运行时环境中设置这些变量,该环境很可能是docker容器。