Tars --- Hello World

服务端开发

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,添加插件

在生成代码的时候会根据此插件来生成

<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 ;内容也基本类似。具体如下:

@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>

一定要正确配置接口和实现类的路径,我之前就是路径问题,花了好长时间才解决的~

7,打成 war 包,这就是一个服务,准备上传

在这里需要上传到管理平台,如果没有搭建好 tars 服务管理平台,请参照上一篇博文

点击提交后到导航菜单“发布管理”,选中服务,上传 war 包,点击发布

客户端开发

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 ,和生成源代码包前缀

<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 文件一致,拷贝即可

4,工程目录下运行 mvn tars:tars2java 命令生成接口

和服务端一致

5,测试,直接运行该文件即可

同步调用

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!");
    }

}
原文地址:https://www.cnblogs.com/huanggy/p/9250160.html