Tars Java — RPC-библиотека и фреймворк
Этот проект представляет собой исходный код Tars RPC фреймворка на языке Java.
Домашняя страница: | tarscloud.org |
Китайская версия: | нажмите здесь, чтобы просмотреть китайскую версию |
В этом руководстве используется Docker для полного развёртывания Tars. [Macos, Linux]
Запуск TarsFramework в Docker
docker pull tarscloud/framework:latest
docker pull tarscloud/tars-node:latest
docker pull mysql:5.6
docker network create -d bridge --subnet=172.25.0.0/16 --gateway=172.25.0.1 tars
docker run -d \
--net=tars \
-e MYSQL_ROOT_PASSWORD="root@appinside" \
--ip="172.25.0.2" \
--name=tars-mysql \
mysql:5.6
sleep 30s
docker run -d \
--net=tars \
-e MYSQL_HOST=172.25.0.2 \
-e MYSQL_ROOT_PASSWORD='root@appinside' \
-eREBUILD=false -eSLAVE=false \
-e INET=eth0 \
--ip="172.25.0.4" \
-p 3000-3001:3000-3001 \
tarscloud/framework
sleep 60s
docker run -d --net=tars --ip="172.25.0.3" -eWEB_HOST=http://172.25.0.4:3000 tarscloud/tars-node
Примечание: параметр -p 18600–18700:18600–18700 открывает порт 18600–18700 для приложения. При необходимости можно добавить больше портов.
Это руководство даёт вам краткое введение в Tars на Java через простой сервер пример сервера.
├── pom.xml
└── src
└── main
├── java
│ └── tars
│ └── testapp
│ ├── HelloServant.java
│ ├── QuickStartApplication.java
│ └── impl
│ └── HelloServantImpl.java
└── resources
└── hello.tars
Следующая конфигурация должна быть добавлена в pom.xml:
Spring boot и зависимость от Tars framework
<properties>
<spring-boot.version>2.3.5.RELEASE</spring-boot.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.tencent.tars</groupId>
<artifactId>tars-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
Зависимость плагина
<!--tars2java plugin-->
<plugin>
<groupId>com.tencent.tars</groupId>
<artifactId>tars-maven-plugin</artifactId>
<version>2.0.0</version>
<configuration>
<tars2JavaConfig>
<!-- tars file location -->
<tarsFiles>
<tarsFile>${basedir}/src/main/resources/hello.tars</tarsFile>
</tarsFiles>
<!-- Source file encoding -->
<tarsFileCharset>UTF-8</tarsFileCharset>
<!-- Generate server code -->
<servant>true</servant>
<!-- Generated source code encoding -->
<charset>UTF-8</charset>
<!-- Generated source code directory -->
<srcPath>${basedir}/src/main/java</srcPath>
<!-- Generated source code package prefix -->
<packagePrefixName>com.qq.tars.quickstart.server.</packagePrefixName>
</tars2JavaConfig>
</configuration>
</plugin>
<!--package plugin-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifestEntries>
<Class-Path>conf/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin> **Создание и тестирование программного обеспечения с использованием Tars**
**Разработка сервиса**
* **Определение файла интерфейса Tars:**
* Tars имеет собственный формат файлов интерфейса. Сначала необходимо определить файл интерфейса Tars. Создайте новый файл *hello.tars* в каталоге *resources* со следующим содержимым:
```text
module TestApp
{
interface Hello
{
string hello(int no, string name);
};
};
```
* **Компиляция файла интерфейса:**
* Затем необходимо преобразовать файл интерфейса Tars в код интерфейса сервера с помощью плагина *tars-maven-plugin*. В корневом каталоге проекта выполните команду *mvn tars: tars2java*, чтобы получить файл *HelloServant.java* со следующим содержанием:
```java
@Servant
public interface HelloServant {
public String hello(int no, String name);
}
```
* **Реализация интерфейса:**
* Далее необходимо реализовать сгенерированный интерфейс сервера. Создайте новый файл *HelloServantImpl.java*, реализуйте интерфейс *HelloServant.java* и предоставьте сервис через аннотацию *@TarsServant*, где «HelloObj» — это имя слуги, соответствующее имени на платформе веб-управления.
```java
@TarsServant("HelloObj")
public class HelloServantImpl implements HelloServant {
@Override
public String hello(int no, String name) {
return String.format("hello no=%s, name=%s, time=%s", no, name, System.currentTimeMillis());
}
}
```
* **Включение службы Tars:**
* Наконец, добавьте аннотацию *@EnableTarsServer* в класс запуска spring boot *QuickStartApplication*, чтобы включить службу Tars:
```java
@SpringBootApplication
@EnableTarsServer
public class QuickStartApplication {
public static void main(String[] args) {
SpringApplication.run(QuickStartApplication.class, args);
}
}
```
Используя плагин *spring-boot-maven*, выполните команду *mvn package* в корневом каталоге, чтобы упаковать его в jar-файл.
**Клиент (потребитель) разработка**
Это руководство даёт вам краткое введение в Tars на Java на примере простого клиента [пример клиента](./examples/tars-spring-boot-server).
**Структура проекта:**
```text
├── pom.xml
└── src
└── main
├── java
│ └── tars
│ └── testapp
│ ├── HelloPrx.java
│ ├── HelloPrxCallback.java
│ ├── App.java
│ └── impl
│ └── ClientServantImpl.java
└── resources
├── hello.tars
└── client.tars
Конфигурация зависимостей:
В pom.xml необходимо добавить следующую конфигурацию:
Зависимость Spring boot и Tars framework:
<properties>
<spring-boot.version>2.0.3.RELEASE</spring-boot.version>
</properties>
<dependencyManagement>
Плагин зависимости:
Компиляция файла интерфейса сервера
После завершения разработки серверного сервиса сначала необходимо получить клиентский код интерфейса серверного сервиса. Скопируйте файл hello.tars на стороне сервера в каталог resources и выполните команду mvn tars: tars2java
в корневом каталоге проекта, чтобы получить HelloPrx.java. В это время получается прокси-интерфейс серверного сервиса, и предоставляются три метода вызова: синхронный вызов, асинхронный вызов и вызов с обещанием.
@Servant
public interface HelloPrx {
String hello(int no, String name);
CompletableFuture<String> promise_hello(int no, String name);
String hello(int no, String name, @TarsContext java.util.Map<String, String> ctx);
void async_hello(@TarsCallback HelloPrxCallback callback, int no, String name);
void async_hello(@TarsCallback HelloPrxCallback callback, int no, String name, @TarsContext java.util.Map<String, String> ctx);
}
Вызов с обещанием — это новая функция Tars v2.0.0. Для конкретного использования обратитесь к справочнику по файлам Tars.
Определение файла интерфейса клиента
Затем определите файл интерфейса клиента. Создайте новый файл client.tars в каталоге resources со следующим содержимым:
module TestApp {
interface Client {
string rpcHello(int no, string name);
};
};
Компиляция файла интерфейса клиента
Далее нам нужно использовать плагин tars-maven-plugin для генерации кода интерфейса клиентского сервиса. Измените зависимость плагина tars2java в pom.xml следующим образом. Обратите внимание, что установлено значение <servant> </ servant>
true.
<!--tars2java plugin-->
<plugin>
<groupId>com.tencent.tars</groupId>
<artifactId>tars-maven-plugin</artifactId>
<version>2.0.0</version>
<configuration>
<tars2JavaConfig>
<!-- tars file location -->
<tarsFiles>
<tarsFile>${basedir}/src/main/resources/client.tars</tarsFile>
</tarsFiles>
<!-- Source file encoding -->
<tarsFileCharset>UTF-8</tarsFileCharset>
<!-- Generate server code -->
<servant>true</servant>
<!-- Generated source code encoding -->
<charset>UTF-8</charset>
<!-- Generated source code directory -->
<srcPath>${basedir}/src/main/java</srcPath>
<!-- Generated source code package prefix -->
<packagePrefixName>com.tencent.tars.client.</packagePrefixName>
</tars2JavaConfig>
</configuration>
</plugin>
В корневом каталоге проекта снова выполните mvn tars: tars2java
, чтобы получить ClientServant.java. Содержимое выглядит следующим образом:
@Servant
public interface ClientServant {
public String rpcHello(int no, String name);
}
Реализация интерфейса
Нам нужно реализовать сгенерированный интерфейс клиентского сервиса. Создайте новый ClientServantImpl.java, реализуйте интерфейс HelloServant.java и предоставьте сервис через аннотацию @TarsServant, где «HelloObj» — имя слуги, соответствующее имени в веб-управлении. Платформа
Добавив аннотацию @TarsClient к свойствам клиента, можно автоматически внедрить соответствующий сервис. Если заполнено только имя объекта Obj, для внедрения клиента используется значение по умолчанию. Кроме того, в аннотации можно настроить конфигурацию клиента, например, установить время ожидания синхронного вызова.
@TarsServant("ClientObj")
public class ClientServantImpl implements ClientServant {
@TarsClient("TestServer.HelloServer.HelloObj")
HelloPrx helloPrx;
String res = "";
@Override
public String rpcHello(int no, String name) {
//синхронный вызов
String syncres = helloPrx.hello(1000, "Hello World");
res += "sync_res: " + syncres + " ";
//асинхронный вызов
helloPrx.async_hello(new HelloPrxCallback() {
@Override
public void callback_expired() {
}
@Override
public void callback_exception(Throwable ex) {
}
@Override
public void callback_hello(String ret) {
res += "async_res: " + ret + " ";
}
}, 1000, "HelloWorld");
//вызов с использованием промиса
helloPrx.promise_hello(1000, "hello world").thenCompose(x -> {
res += "promise_res: " + x;
return CompletableFuture.completedFuture(0);
});
return res;
}
}
Наконец, добавьте аннотацию @EnableTarsServer в класс запуска Spring Boot App, чтобы включить сервис Tars:
@SpringBootApplication
@EnableTarsServer
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
Используя spring-boot-maven-plugin, выполните команду mvn package
в корневом каталоге, чтобы упаковать его в jar-файл.
Tars-java совместим с системой Spring Cloud, пользователи могут интегрировать Tars-java в Spring Cloud.
Каталог | Функции |
---|---|
net | Исходный код реализации сетевого фреймворка на языке Java |
core | Исходный код реализации rpc-фреймворка на языке Java |
tools | Исходный код реализации инструментов фреймворка, maven-плагинов и т. д. |
examples | Пример кода для фреймворка Java-языка |
distributedContext | Исходный код реализации распределённого контекста фреймворка языка Java |
protobuf | Исходный код реализации поддержки протокола pb |
spring | Исходный код реализации поддержки Spring-фреймворка |
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )