1. 程式人生 > 其它 >【深入理解TcaplusDB技術】示例程式碼——非同步呼叫介面

【深入理解TcaplusDB技術】示例程式碼——非同步呼叫介面


【深入理解TcaplusDB技術】示例程式碼——非同步呼叫介面

本文說明

Java SDK所有介面的呼叫,都支援非同步呼叫模式。

除資料掃描相關介面,有單獨的非同步呼叫模式之外,其它介面的非同步呼叫方式是相同的。

與同步呼叫的區別是,同步呼叫的使用的是Client的poll方法發起呼叫,而非同步呼叫使用的是Client的post方法發起呼叫。

準備工作

參見章節: 準備工作

示例程式碼

本文以非同步讀取資料為例,介紹非資料掃描介面的非同步呼叫過程。

示例程式碼

import com.tencent.tcaplus.client.Client;
import com.tencent.tcaplus.client.ClientFactory;
import com.tencent.tcaplus.client.Record;
import com.tencent.tcaplus.client.Request;
import com.tencent.tcaplus.client.Response;
import com.tencent.tdr.tcaplus_protocol_cs.TcaplusProtocolCsConstants;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;

public class Example {

   public static void main(String[] arguments) throws InterruptedException {
       // 1. 準備環境資訊
       // 1.1. 目錄服務地址列表
       List<String> dirList = new ArrayList<String>();
       dirList.add("tcp://x.x.x.x:9999");
       dirList.add("tcp://y.y.y.y:9999");
       // 1.2. 業務ID
       int appId = 1;
       // 1.3. 業務密碼
       String appPassword = "****************";
       // 1.4. 表格組ID
       int tableGroupId = 1;
       // 1.5. 表格名稱
       String tableName = "test";

       // 2. 建立客戶端
       Client client = ClientFactory.createClient(appId, tableGroupId, appPassword, dirList);
       try {
           // 3. 構造查詢資料的請求
           // 3.1. 獲取請求物件。為了提升SDK效能,Request物件是複用的
           Request request = client.acquireRequest();
           // 3.2. 設定請求型別和目標表名
           request.setCmd(TcaplusProtocolCsConstants.TCAPLUS_CMD_GET_REQ);
           request.setTableName(tableName);
           // 3.3. 設定各個Key欄位的值
           Record record = request.addRecord();
           record.setKeyInt("gameid", 1);
           record.setKeyInt("itemid", 1);
           record.setKeyString("name", "test");
           // 3.4. 新增需要查詢的Value欄位
           request.addFieldName("typeid");
           request.addFieldName("Data");
           request.addFieldName("uname");

           CountDownLatch latch = new CountDownLatch(1);

           // 4. 非同步傳送請求,並指定返回結果處理器,post方法會立即返回
           client.post(request, new Future() {

               @Override
               public void onResponse(Response response) {
                   // 5. 處理結果
                   if (response.getResult() == 0) {
                       // 查詢資料成功
                       Record result