摘要:客戶端并行調(diào)用這兩個服務(wù)這里的方法的命令皆以原版為準則?;卣{(diào)函數(shù)需要繼承實現(xiàn)里面定義了兩個方法是針對并行調(diào)用發(fā)出之后立即執(zhí)行的任務(wù),而則是每個請求之后返回的結(jié)果。
簡介
Yar 是一個輕量級, 高效的 RPC 框架, 它提供了一種簡單方法來讓 PHP 項目之間可以互相遠程調(diào)用對方的本地方法. 并且 Yar 也提供了并行調(diào)用的能力. 可以支持同時調(diào)用多個遠程服務(wù)的方法.
Yar 鳥哥博客介紹 http://www.laruence.com/2012/09/15/2779.html
Yar 鳥哥原始項目 https://github.com/laruence/yar
Yar Java Client 則實現(xiàn)了跨語言的遠程調(diào)用。使得 Java 客戶端能夠調(diào)用 Yar PHP 服務(wù)器端本地的方法。
特性github: https://github.com/zhoumengkang/yar-java-client
您的 star 就是對我們小菜的最大的鼓勵,O(∩_∩)O~~
執(zhí)行速度快,依舊保持鳥哥初衷,框架輕,使用簡單
支持并行的 RPC 調(diào)用
方法的使用和參數(shù)的和 PHP 版本保持一致
范例 PHP服務(wù)器端提供了服務(wù)兩個 rpc api ,模擬的業(yè)務(wù)場景是點贊贈送金幣和發(fā)布帖子贈送金幣。
handle();Java客戶端同步調(diào)用這兩個服務(wù)
public class YarClientTest extends TestCase { /** * 定義 rpc 接口 */ public interface RewardScoreService{ String support(int uid,int fid); String post(int uid,int fid); } /** * rpc api 地址 */ static String uri = "http://mengkang.net/demo/yar-server/RewardScoreService.php"; public void testUserService(){ // 第一種調(diào)用方式 YarClient yarClient = new YarClient(uri); RewardScoreService rewardScoreService = (RewardScoreService) yarClient.useService(RewardScoreService.class); for (int i = 0; i < 10; i++) { System.out.println(rewardScoreService.support(1, 2)); } // 第二種調(diào)用方式 YarClientOptions yarClientOptions = new YarClientOptions(); yarClientOptions.setConnect_timeout(2000); YarClient yarClient2 = new YarClient(uri,yarClientOptions); RewardScoreService rewardScoreService2 = (RewardScoreService) yarClient2.useService(RewardScoreService.class); for (int i = 0; i < 10; i++) { System.out.println(rewardScoreService2.post(1, 20)); } } }
考慮到 Java 和 PHP 的數(shù)據(jù)類型的不同,這里做了一個折中的處理,返回數(shù)據(jù)類型客戶端框架統(tǒng)一以O(shè)bject類型接受,然后使用時再根據(jù)接口定義的數(shù)據(jù)類型進行轉(zhuǎn)換。
Java客戶端并行調(diào)用這兩個服務(wù)這里的方法的命令皆以 Yar 原版為準則。
YarConcurrentClient.call方法注冊,
YarConcurrentClient.loop并行調(diào)用,
YarConcurrentClient.reset清空任務(wù)。
回調(diào)函數(shù)需要繼承實現(xiàn)YarConcurrentCallback里面定義了兩個方法:async是針對并行調(diào)用發(fā)出之后立即執(zhí)行的任務(wù),而success則是每個請求之后返回的結(jié)果。
public class YarConcurrentClientTest extends TestCase { /** * rpc api 地址 */ static String uri = "http://mengkang.net/demo/yar-server/RewardScoreService.php"; public class callback extends YarConcurrentCallback { public void async() { System.out.println("現(xiàn)在, 所有的請求都發(fā)出去了, 還沒有任何請求返回"); } public Object success() { return retValue; } } public class errorCallback extends YarConcurrentErrorCallback { @Override void error() { System.out.println("出錯了"); } } public void testLoop() throws Exception { String packagerName = YarConfig.getString("yar.packager"); YarClientOptions yarClientOptions = new YarClientOptions(); yarClientOptions.setConnect_timeout(2000); for (int i = 0; i < 10; i++) { // 第一種調(diào)用方式 YarConcurrentClient.call(new YarConcurrentTask(uri, "support", new Object[]{1, 2}, packagerName, new callback())); // 第二種調(diào)用方式 增加一些額外配置選項 YarConcurrentClient.call(new YarConcurrentTask(uri, "support", new Object[]{1, 2}, packagerName, new callback(),yarClientOptions)); } for (int i = 0; i < 10; i++) { // 第三種調(diào)用方式 有正確的回調(diào)和錯誤的回調(diào) YarConcurrentClient.call(new YarConcurrentTask(uri,"post",new Object[]{1,2},packagerName,new callback(),new errorCallback())); // 第四種調(diào)用方式 在第三種的基礎(chǔ)上增加額外的配置選項 YarConcurrentClient.call(new YarConcurrentTask(uri,"post",new Object[]{1,2},packagerName,new callback(),new errorCallback(),yarClientOptions)); } YarConcurrentClient.loop(new callback()); YarConcurrentClient.reset(); } }
github: https://github.com/zhoumengkang/yar-java-client
您的 star 就是對我們小菜的最大的鼓勵,O(∩_∩)O~~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/65326.html
摘要:的框架的話語言的話首選的當然是鳥哥的,支持并行等等,總之有很多優(yōu)點。首先查看了鳥哥的文章并行的框架,對的基本原理有了一個認識,做了一個簡單的請求頁面,具體見鳥哥博客,沒問題,接下來就是對現(xiàn)有項目的改造了。最后感謝鳥哥寫出這么牛掰的東西。 公司新上了個頻道,需要我負責的幾個頻道提供接口,因為進度比較趕,就直接寫了web的 http 接口供同事訪問。 后來訪問量越來越大,出現(xiàn)了很多問題,...
摘要:面向服務(wù)面向服務(wù)的基礎(chǔ)面向服務(wù)的三層應(yīng)用層,服務(wù)層,數(shù)據(jù)層應(yīng)用層用于給用戶展示,,,,安卓。在服務(wù)器端,進程保持睡眠狀態(tài)直到調(diào)用信息到達為止。編譯完成,提示我們已經(jīng)在下了。 面向服務(wù) 面向服務(wù)的基礎(chǔ) 面向服務(wù)的三層:應(yīng)用層,服務(wù)層,數(shù)據(jù)層 * 應(yīng)用層:用于給用戶展示,PC,H5,IOS,安卓。 * 服務(wù)層:業(yè)務(wù)邏輯,提供接口(商品,訂單,支付,用戶,物流)。 * 數(shù)據(jù)層:提供數(shù)據(jù)支持(...
摘要:需求在了解了前面我們關(guān)于服務(wù)治理出現(xiàn)的必要性之后。我們知道服務(wù)治理是建立在眾多服務(wù)基礎(chǔ)之上的,那么,第一步,打通這些服務(wù)是基礎(chǔ),也就是我們常說的遠程調(diào)用。上面執(zhí)行遠程調(diào)用也類似。 需求 在了解了前面我們關(guān)于服務(wù)治理出現(xiàn)的必要性之后。我們知道服務(wù)治理是建立在眾多服務(wù)基礎(chǔ)之上的,那么,第一步,打通這些服務(wù)是基礎(chǔ),也就是我們常說的 RPC 遠程調(diào)用。要像調(diào)用本地方法一樣調(diào)用遠程服務(wù)器上的方法...
摘要:服務(wù)本身是一個,開起的線程數(shù)為,再加上一些其他線程,總的線程數(shù)不會超過服務(wù)內(nèi)自己沒有顯示創(chuàng)建線程或者使用線程池。問題解決找到所在后,結(jié)局方案很簡單,只需將的通過單例的方式注入到服務(wù)中,即可解決堆外內(nèi)存泄漏的問題。 內(nèi)存泄漏Bug現(xiàn)場 一個做BI數(shù)據(jù)展示的服務(wù)在一個晚上重啟了5次,由于是通過k8s容器編排,服務(wù)掛了以后會自動重啟,所以服務(wù)還能繼續(xù)提供服務(wù)。 第一時間先上日志系統(tǒng)查看錯誤日...
摘要:微博墻就是這樣的一個工具,這不是一款普通的插件,這是一款搭建在基于的插件。這是一款基于的插件,底層語言開發(fā),性能卓越。 在現(xiàn)在移動互聯(lián)網(wǎng)時代,微博已經(jīng)成為了每個人生活中必不可少的一個社交工具。而WordPress是全世界最為流行的博客系統(tǒng),把你的博客接入新浪微博,借助微博的強大用戶群,不僅能給你的網(wǎng)站提供巨大的流量,而且還能帶來不可估量價值。 WordPress微博墻就是這樣的一個工具...
閱讀 3098·2023-04-26 00:32
閱讀 574·2019-08-30 15:52
閱讀 2174·2019-08-30 15:52
閱讀 3450·2019-08-30 15:44
閱讀 3342·2019-08-30 14:09
閱讀 1481·2019-08-29 15:15
閱讀 3455·2019-08-28 18:12
閱讀 1166·2019-08-26 13:55