Vertx Kotlin RPC over EventBus
A minimalist RPC framework для Vertx/Kotlin
Начало работы
Артефакт размещён на jCenter, следуйте инструкции, чтобы настроить инструмент сборки.
Maven:
<dependency>
<groupId>codes.unwritten</groupId>
<artifactId>vertx-kotlin-rpc</artifactId>
<version>0.6</version>
<type>pom</type>
</dependency>
Gradle:
compile 'codes.unwritten:vertx-kotlin-rpc:0.6'
import codes.unwritten.vertx.kotlin.rpc.RpcServerVerticle
//...
// Не нужно реализовывать интерфейс сервиса, если сигнатура метода совпадает
class HelloSvcImpl {
// Метод может быть suspend или нет
fun hello(name: String): String = "Hello, $name!"
}
// ...
vertx.deployVerticle(RpcServerVerticle("test-channel")
.register("hello", HelloSvcImpl()))
import codes.unwritten.vertx.kotlin.rpc.getServiceProxy
// ...
interface HelloSvc {
// Должен быть suspend, иначе при вызове будут выброшены исключения.
suspend fun hello(world: String): String
}
// ...
// Получить объект прокси службы
val svc: HelloSvc = getServiceProxy(vertx, "test-channel", "hello")
// Вызвать службу
assertEqual("Hello, world!", svc.hello("world"))
import io.vertx.core.Vertx
import io.vertx.ext.web.Router
import io.vertx.ext.web.handler.BodyHandler
import io.vertx.kotlin.coroutines.CoroutineVerticle
import codes.unwritten.vertx.kotlin.rpc.HttpRpcHandler
// ...
class SomeVerticle: CoroutineVerticle() {
override suspend fun start() {
// ...
val router = Router.router(vertx)
// Убедитесь, что обработчик тела включён
router.route().handler(BodyHandler.create())
// Поддерживается только метод POST
router.post("/some-path").handler(HttpRpcHandler().register("hello", object {
fun hello(name: String): String = "Hello, $name!"
}))
// Запустить HTTP-сервер и т. д.
// ...
}
}
import codes.unwritten.vertx.kotlin.rpc.getHttpServiceProxy
interface HelloSvc {
// Должен быть suspend, иначе исключения будут выброшены при вызове.
suspend fun hello(name: String): String
}
// ...
// Получить прокси объекта службы из URL
val svc = getHttpServiceProxy<HelloSvc>(vertx, "http://127.0.0.1:8080/some-path", "hello")
// Вызов службы
assertEqual("Привет, мир!", svc.hello("мир"))
import codes.unwritten.vertx.kotlin.rpc.HttpRequest
import codes.unwritten.vertx.kotlin.rpc.JsonRpcException
import codes.unwritten.vertx.kotlin.rpc.QueryParam
import codes.unwritten.vertx.kotlin.rpc.getHttpJsonRpcServiceProxy
interface DemoSvc {
// Должен быть suspend, иначе исключения будут выброшены при вызове.
// Аннотация HttpRequest используется для настройки сопоставления
// По умолчанию метод — POST, а путь — имя метода
@HttpRequest(method = HttpMethod.GET, path = "comments")
suspend fun getComments(postId: Int): List<Comment>
}
// ...
// Получить прокси объекта службы из URL
val svc = getHttpJsonRpcServiceProxy<PostmanSvc>(vertx, "https://postman-echo.com/")
// Вызов службы
context.assertTrue(svc.getComments(1).isNotEmpty())
Другой пример:
interface PostmanSvc {
@HttpRequest(method = HttpMethod.GET)
// Аннотация QueryParam указывает, что это параметр запроса, а не часть тела запроса,
// Также можно настроить имя параметра
suspend fun get(@QueryParam foo1:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )