All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.zero88.msa.bp.micro.type.Pusher Maven / Gradle / Ivy

package io.github.zero88.msa.bp.micro.type;

import java.util.function.Consumer;

import io.github.zero88.msa.bp.dto.msg.ResponseData;
import io.github.zero88.msa.bp.event.EventAction;
import io.github.zero88.msa.bp.event.EventMessage;
import io.github.zero88.msa.bp.event.EventbusClient;
import io.github.zero88.msa.bp.event.ReplyEventHandler;
import io.github.zero88.msa.bp.micro.metadata.EventMethodDefinition;
import io.vertx.core.eventbus.DeliveryOptions;
import io.vertx.core.http.HttpMethod;
import io.vertx.core.json.JsonObject;

import lombok.AccessLevel;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor(access = AccessLevel.PACKAGE)
class Pusher implements EventMessagePusher {

    @NonNull
    private final EventbusClient controller;
    @NonNull
    private final EventMethodDefinition definition;
    @NonNull
    private final DeliveryOptions options;
    @NonNull
    private final String address;

    @Override
    public void execute(String path, HttpMethod httpMethod, JsonObject requestData, Consumer dataConsumer,
                        Consumer errorConsumer) {
        EventAction action = definition.search(path, httpMethod);
        ReplyEventHandler handler = ReplyEventHandler.builder()
                                                     .system("SERVICE_DISCOVERY")
                                                     .address(address)
                                                     .action(EventAction.RETURN)
                                                     .success(msg -> dataConsumer.accept(ResponseData.from(msg)))
                                                     .exception(errorConsumer)
                                                     .build();
        controller.request(address, EventMessage.initial(action, requestData), handler, options);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy