Hyperledger Fabric學習筆記——Connection Options

connection options和connection profile一起使用,以精確控制網關與網絡的交互方式。

1、用法

const userName = '[email protected]';
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容器。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章