原聲的zookeeper 的crud api有同步和非同步之分,對於非同步api,需要傳遞asynccallback**。對於getdata,getchildren,exists這三個api,還可以設定watcher。這些功能在curator中是如何實現的?
在curator中,可以通過如下三種方式來非同步獲取結果:
1.inbackground()+curatorlistener
2.inbackground(new backgroundcallback()})
3.inbackground(newbackgroundcallback(){},executor)
以inbackground()+curatorlistener這種方式來使用非同步api,如下:
client.getcuratorlistenable().addlistener(newcuratorlistener()
else
if(event.gettype()==curatoreventtype.get_data)
else
if(event.gettype()==curatoreventtype.set_data)
else
if(event.gettype()==curatoreventtype.delete)
}});
接下來client的所有以inbackground()方式使用的api,其非同步處理結果都是通過這個curatorlistener來處理。
在第二中方式inbackground(backgroundcallback)中,如下:
client.create().creatingparentsifneeded()
.withprotection()
.withmode(createmode.ephemeral)
.inbackground(
newbackgroundcallback()}
} ).forpath("/francis/tmp/a","wbs".getbytes());
Curator使用 二 非同步呼叫
executorservice es executors.newfixedthreadpool 2 帶執行緒池的非同步介面 cc.create inbackground client,event system.out.println thread.currentthread getname even...
非同步記錄日誌 獲取非同步處理結果
1.場景 有事務的情況下,記錄將異常資訊記錄到異常表中 2.處理過程 2.1本來是加上never或者notsurport註解,然後在throw拋異常之前把異常資訊插入資料庫,但是未成功,拋異常時回滾 2.2finally中呼叫被 async註解的方法 2.3注意 這個帶 async註解的方法要放在其...
go 非同步結果
package main import context fmt time func add a,b int chan int a,b return c func main ctx,cancel 直接結算獲取結果 result add 1,2 對結果進行操作 fmt.println result 可以...