1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/silentbalanceyh-vertx-zero

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
zero-mode.md 6.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 04:28 85b9559

Запрос Mode

Нулевая система поддерживает пять режимов запроса, как показано ниже (пожалуйста, игнорируйте название режима, оно используется только для различения).

1. Режим 1: синхронный режим

Этот режим используется для синхронного режима запроса-ответа в vert.x. Вы можете определить свой метод следующим образом:

    @GET
    @Path("/sync/string")
    public String syncRequest(
            @QueryParam("email") final String email
    ) {
        final String response = "Тестирование завершено";
        return response;
    }

Правило:

  1. Тип возврата метода не должен быть void;
  2. Не используйте аннотацию @Address для этого метода.

Рабочий процесс

Mode1

2. Режим 2: блокирующий режим

Этот режим используется только для запросов в vert.x, вы можете определить свой метод следующим образом:

    @GET
    @Path("/block/{name}")
    public void blockRequest(
            @PathParam("name") final String name) {
        System.out.println("блокирующий запрос");
    }

Правило

  1. Тип возврата метода должен быть void;
  2. Нет желания получать какие-либо данные из ответа, этот тип режима предоставляет только статус этой работы.

Рабочий процесс

Model

3. Режим 3: односторонний режим

Этот режим похож на режим 2, но данные будут отправляться в шину событий для выполнения асинхронных заданий (будет удалён).

Отправитель

    @POST
    @Path("/one-way/user")
    @Address("ZERO://USER")
    public String sendNotify(
            @BodyParam final User user) {
        final String response = Jackson.serialize(user);
        return response;
    }

Потребитель

    @Address("ZERO://USER")
    public void reply(final Envelop message) {
        final User user = message.data(User.class);
        // Выполнить действия
    }

Правило

  1. Методы @EndPoint и @Queue должны быть аннотированы с помощью @Address, и они должны совпадать между отправителем и потребителем.
  2. Тип возврата метода в @EndPoint не должен быть void.
  3. Необходимо определить сигнатуру метода потребителя как public void xxx(Envelop).

Рабочий процесс

Model 3

4. Режим 4: асинхронный режим (стиль Java)

Это асинхронный режим запроса-ответа между потребителем и отправителем на шине событий.

Отправитель

    @POST
    @Path("/async/user")
    @Address("ZERO://ROLE")
    public String sendAsync(
            @BodyParam final User user) {
        final String response = Jackson.serialize(user);
        return response;
    }

Потребитель

    @Address("ZERO://USER")
    public Envelop reply(final Envelop message) {
        final User user = message.data(User.class);
        final WebException error = new TestRequestException(getClass(),
                "Lang", "Detail");
        return Envelop.failure(error);
    }

Правило

  1. Методы @EndPoint и @Queue должны быть аннотированы с помощью @Address, и они должны совпадать между отправителем и потребителем.
  2. Тип возврата метода в @EndPoint не должен быть void.
  3. Необходимо определить сигнатуру метода потребителя как public Envelop xxx(Envelop).

Рабочий процесс

Model 4

5. Режим 5: асинхронный режим Vert.x (стиль Vert.x)

Этот режим поддерживается для использования некоторых компонентов vert.x в сервисном слое системы, таких как MongoClient, SQLClient и т. д.

Отправитель (такой же, как режим 4)

    @Path("/event")
    @POST
    @Address("ZERO://EVENT")
    public JsonObject sayEvent(
            @BodyParam final JsonObject data) {
        return data;
    }

Потребитель

    @Mongo
    private transient MongoClient client;
    
    @Address("ZERO://ROLE")
    public void async(final Message<Envelop> message) {
        final User user = Envelop.data(message, User.class);
        final JsonObject userData = new JsonObject(Jackson.serialize(user));
        this.client.save("DB_USER", userData, res -> {
            if (res.succeeded()) {
                message.reply(Envelop.success("Hello World"));
            } else {
                res.cause().printStackTrace();
            }
        });
    }

Правило

  1. Методы @EndPoint и @Queue должны соответствовать определённым правилам. Должно быть аннотировано с помощью @Address, и они должны быть одинаковыми между отправителем и получателем.

  2. Тип возвращаемого значения метода в @EndPoint не должен быть void.

  3. Необходимо определить сигнатуру метода получателя как public void xxx(Message<Envelop>).

  4. Не забудьте вызвать reply(Envelop) в обратном вызове для Message<Envelop>.

Рабочий процесс

Mode 5 (Моуд файф)

Все вышеперечисленные режимы запросов могут описывать разное использование, но мы рекомендуем использовать Mode 4 и Mode 5.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/silentbalanceyh-vertx-zero.git
git@api.gitlife.ru:oschina-mirror/silentbalanceyh-vertx-zero.git
oschina-mirror
silentbalanceyh-vertx-zero
silentbalanceyh-vertx-zero
master