開源分布式量化交易系統 初識ZeroMQ

2021-09-19 23:43:52 字數 2905 閱讀 1651

由於下面章節會涉及到程式間通訊,會用到zeromq通訊中介軟體,所以先介紹下zeromq的幾種通訊模式,並且通過幾個小demo來初步了解它的應用。

發布和訂閱模式,該模式主要用於**中心在收到交易所**並封裝好訊息後通過pub方式發布給客戶端,客戶端通過sub方式訂閱需要接收**的合約。

推拉模式,該模式主要用於後端測試工人在測試完成後將結果推送給回測中心,由回測中心統一將測試報告入庫。

路由模式,該模式主要將客戶端指令**給下單工人,由下單工人加指令傳送至交易所場內。

public class zmqtest

break;

}using (var head = new zeromq.zframe("time"))

using (var body = new zeromq.zframe(datetime.now.timeofday.tostring()))

thread.sleep(2000);

}console.writeline("pubserver is closed.");

}});

task.start();

}/// /// 啟動訂閱客戶端

///

public void startsubclient()

using (var msg = client.receivemessage())

if (msg.count == 2)

->", title, content);}}

}console.writeline("subclient is closed.");

}});

task.start();

}/// /// 啟動訊息拉取伺服器

///

public void startpullserver()

using (var msg = server.receivemessage())

else

", content);}}

}console.writeline("pullserver is closed.");

}});

task.start();

}/// /// 啟動訊息推送客戶端

///

public void startpushclient()

break;

}using (var content = new zeromq.zframe("push->"+datetime.now.timeofday.tostring()))

thread.sleep(2000);

}console.writeline("pushclient is closed.");

}});

task.start();

}/// /// 啟動路由伺服器

///

public void startrouterserver()

using (var msg = front.receivemessage())

", id);

var content = "do work->" + msg[1].readstring();

var replymsg = "no worker";

if (workerlist.count > 0)

using (var head = new zeromq.zframe(workerlist[i]))

using (var body = new zeromq.zframe(content))

replymsg = "beging working...";

i++;

}using (var reply = new zeromq.zframe(replymsg))}}

front.close();

console.writeline("frontserver is closed.");

});task taskbacend = new task(() =>

// 接收工人上線訊息

using (var msg = backend.receivemessage())

if (!workerlist.contains(worker))

console.writeline(" is standby, msg:", worker, info);}}

backend.close();

console.writeline("backendserver is closed.");

});taskfront.start();

taskbacend.start();

}listworkerlist = new list();

/// /// 啟動訂閱客戶端

///

public void startdealerclient()

break;

}using (var content = new zeromq.zframe("task " + datetime.now.timeofday.tostring()))

thread.sleep(10000);

}console.writeline("dealerclient is closed.");

}});

task.start();

}/// /// 啟動訂閱客戶端

///

public void startdealerworker(string id)

while (true)

break;

}using (var msg = worker.receivemessage())}}

console.writeline("backendclient is closed.");

}});

task.start();

}public void stop()

}

開源分布式檔案系統

mogilefs乙個開源的分布式檔案系統 1.應用層 沒有特殊的元件要求 2.無單點失敗 mogilefs啟動的三個元件 儲存節點 跟蹤用的資料庫 均可執行在多個 機器上,因此沒有單點失敗。你也可以將 和儲存節點執行在同一臺機器上,這樣你就沒有必要用4臺機器 推薦至少兩台機器。3.自動的檔案複製 檔...

電商交易系統高併發分布式訂單號生成策略

商交易系統高併發分布式訂單號生成策略 一 要求 1.全域性唯一性,不能重複 2.資訊保安加密防止使用者根據id規則獲取資料 二,策略 1.uuid 唯一識別碼,16個位元組 128位 uuid 有幾個實現版本,比如jdk 自帶的uuid 優點 生成簡單,不占用寬頻,本地生成,資料遷移不影響。缺點 字...

分布式系統關注點 初識 高可用

本文長度為2042字,建議閱讀6分鐘。所有 包裹的文字,只對第一次出現進行高亮顯示。閱讀目錄咳咳,從這篇開始,正式拉開分布式系統關注點中,我認為第二重要的內容 高可用 本篇的要點主要是明確 高可用 的定義,以及了解在分布式系統下哪些環節要做 高可用 為後續要講的策略 方式方案打下基礎。如有1年以上的...