13 7 應用開發案例四 傳送事件

2021-09-16 19:36:10 字數 1418 閱讀 2794

fabric應用程式除了通過主動查詢來獲取當前已確認的狀態,還可以通過訂閱並監聽事件(event)來獲取交易執行資訊,用於進行交易確認或者審計。

本節的例子將展示如何在鏈碼中傳送事件。詳細**可見examples/chaincode/go/eventsender/eventsender.go。

傳送事件需要使用stub.setevent方法。方法格式為setevent(namestring,payloadbyte)error。其中,name表示事件名稱,payload為事件內容。

通過該方法,可以設定當這個交易在committer處被認證通過,寫入到區塊時所傳送的事件。

示例鏈碼的invoke分支方法被呼叫時,會將記錄在賬本中的遞增序列和invoke傳入的引數串聯起來作為事件內容,以evtsender為事件名稱,呼叫stub.setevent方法。

關鍵**如下所示:

func (t *eventsender) invoke(stub shim.chaincodestubinte***ce, args string)

pb.response 

noevts, _ := strconv.atoi(string(b))

tosend := "event " + string(b)

for _, s := range args 

err = stub.putstate("noevents", byte(strconv.itoa(noevts+1)))

if err != nil 

err = stub.setevent("evtsender", byte(tosend))

if err != nil 

return shim.success(nil)

}

應用開發者可以使用sdk中封裝的方法監聽鏈碼發出的事件,並據此作出處理邏輯。也可以簡單用fabric提供的block-listener工具監聽並檢視事件。

block-listener工具**位於examples/events/block-listener,其中展示了如何利用事件客戶端來從網路中獲取事件資訊。建立事件客戶端的核心**如下所示:

func createeventclient(eventaddress string, _ string) *adapter 

obcehclient, _ = consumer.neweventsclient(eventaddress, 5, adapter)

if err := obcehclient.start(); err != nil 

return adapter

}

'); (window.slotbydup = window.slotbydup || ).push(); })();

'); (window.slotbydup = window.slotbydup || ).push(); })();

Hive UDF開發案例

bin hive中操作 臨時函式的使用 add jar home hadoop lib train 1.0 snapshot.jar 將上傳的jar包匯入到classpath變數裡 list jars 檢視匯入的jar包 create temporary function say hello as ...

Flume基礎(四) 企業開發案例(一)

1 案例需求 首先,flume 監控本機 44444 埠,然後通過 telnet 工具向本機 44444 埠發 送訊息,最後 flume 將監聽的資料實時顯示在控制台。2 需求分析 3 實現步驟 1 安裝 telnet 工具 將 rpm 軟 件 包 xinetd 2.3.14 40.el6.x86 ...

移動端開發案例

touchstart touchmove touchend 可以實現拖動元素 但是拖動元素需要當前手指的座標值 我們可以使用 targettouches 0 裡面的pagex 和 pagey 移動端拖動的原理 手指移動中,計算出手指移動的距離。然後用盒子原來的位置 手指移動的距離 手指移動的距離 手...