服務端開發
1,建立一個 webapp maven 項目,pom.xml 導入依賴
<dependency> <groupId>com.tencent.tars</groupId> <artifactId>tars-server</artifactId> <version>1.6.0</version> <type>jar</type> </dependency>
2,添加插件
在生成代碼的時候會根據此插件來生成java
<plugin> <groupId>com.tencent.tars</groupId> <artifactId>tars-maven-plugin</artifactId> <version>1.6.0</version> <configuration> <tars2JavaConfig> <!-- 項目中 tars 文件位置 --> <tarsFiles> <tarsFile>${basedir}/src/main/resources/hello.tars</tarsFile> </tarsFiles> <!-- 源文件編碼 --> <tarsFileCharset>UTF-8</tarsFileCharset> <!-- 生成服務端代碼 --> <servant>true</servant> <!-- 生成源代碼編碼 --> <charset>UTF-8</charset> <!-- 生成的源代碼目錄 --> <srcPath>${basedir}/src/main/java</srcPath> <!-- 生成源代碼包前綴 --> <packagePrefixName>com.qq.tars.quickstart.server.</packagePrefixName> </tars2JavaConfig> </configuration> </plugin>
3,在 src/main/resources 中新建 hello.tars 文件
module TestApp { interface Hello{ string hello(int no, string name); }; };
4,在工程目錄下運行 mvn tars:tars2java 命令來生成接口文件
tars 文件決定了生成的接口,命名上追加 Servant ;內容也基本相似。具體以下:web
@Servant public interface HelloServant { public String hello(int no, String name); }
5,繼承接口,實現方法
public class HelloServantImpl implements HelloServant { public String hello(int no, String name) { // TODO Auto-generated method stub return String.format("hello no=%s, name=%s, time=%s", no, name, System.currentTimeMillis()); }
}
6,在 src/main/resources 中新建 servants.xml 文件,目的是暴露服務
<?xml version="1.0" encoding="UTF-8"?> <servants> <!-- 這是 OBJ 名 --> <servant name="HelloObj"> <!-- tars 生成的接口路徑 --> <home-api>com.qq.tars.quickstart.server.testapp.HelloServant</home-api> <!-- 咱們本身的實現類路徑 --> <home-class>com.qq.tars.quickstart.server.testapp.impl.HelloServantImpl</home-class> </servant> </servants>
必定要正確配置接口和實現類的路徑,我以前就是路徑問題,花了好長時間才解決的~api
7,打成 war 包,這就是一個服務,準備上傳
在這裏須要上傳到管理平臺,若是沒有搭建好 tars 服務管理平臺,請參照上一篇博文app
點擊提交後到導航菜單「發佈管理」,選中服務,上傳 war 包,點擊發布webapp
客戶端開發
1,新建 maven webapp 項目,導入依賴
和服務端基本一致,區別是<artifactId>標籤裏是tars-client異步
<dependency> <groupId>com.tencent.tars</groupId> <artifactId>tars-client</artifactId> <version>1.6.0</version> <type>jar</type> </dependency>
2,添加插件
和服務端基本一致,區別是 <servant> 標籤裏是 false ,和生成源代碼包前綴async
<plugin> <groupId>com.tencent.tars</groupId> <artifactId>tars-maven-plugin</artifactId> <version>1.6.0</version> <configuration> <tars2JavaConfig> <!-- tars文件位置 --> <tarsFiles> <tarsFile>${basedir}/src/main/resources/hello.tars</tarsFile> </tarsFiles> <!-- 源文件編碼 --> <tarsFileCharset>UTF-8</tarsFileCharset> <!-- 生成代碼,PS:客戶端調用,這裏須要設置爲false --> <servant>false</servant> <!-- 生成源代碼編碼 --> <charset>UTF-8</charset> <!-- 生成的源代碼目錄 --> <srcPath>${basedir}/src/main/java</srcPath> <!-- 生成源代碼包前綴 --> <packagePrefixName>com.qq.tars.quickstart.client.</packagePrefixName> </tars2JavaConfig> </configuration> </plugin>
3,在 src/main/resources 中新建 hello.tars 文件
文件和服務端的 tars 文件一致,拷貝便可maven
4,工程目錄下運行 mvn tars:tars2java 命令生成接口
和服務端一致tcp
5,測試,直接運行該文件便可
同步調用ide
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub CommunicatorConfig cfg = new CommunicatorConfig(); //構建通訊器 Communicator communicator = CommunicatorFactory.getInstance().getCommunicator(cfg); //經過通訊器,生成代理對象 HelloPrx proxy = communicator.stringToProxy(HelloPrx.class, "TestAppToTwo.HelloServer.HelloObj@tcp -h 111.231.63.166 -p 8202"); String ret = proxy.hello(1000, "HelloWorld"); System.out.println(ret); } }
異步調用
public class TestAsync { public static void main(String[] args) { // TODO Auto-generated method stub CommunicatorConfig cfg = new CommunicatorConfig(); //構建通訊器 Communicator communicator = CommunicatorFactory.getInstance().getCommunicator(cfg); //經過通訊器,生成代理對象 HelloPrx proxy = communicator.stringToProxy(HelloPrx.class, "TestAppToTwo.HelloServer.HelloObj@tcp -h 111.231.63.166 -p 8202"); proxy.async_hello(new HelloPrxCallback() { @Override public void callback_expired() { } @Override public void callback_exception(Throwable ex) { } @Override public void callback_hello(String ret) { System.out.println(ret); } }, 1000, "Hello World!"); } }