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

org.reactivecommons.async.rabbit.standalone.config.DirectAsyncGatewayConfig Maven / Gradle / Ivy

The newest version!
package org.reactivecommons.async.rabbit.standalone.config;

import io.micrometer.core.instrument.MeterRegistry;
import lombok.AllArgsConstructor;
import org.reactivecommons.async.commons.config.BrokerConfig;
import org.reactivecommons.async.commons.converters.MessageConverter;
import org.reactivecommons.async.commons.reply.ReactiveReplyRouter;
import org.reactivecommons.async.rabbit.RabbitDirectAsyncGateway;
import org.reactivecommons.async.rabbit.communications.ReactiveMessageListener;
import org.reactivecommons.async.rabbit.communications.ReactiveMessageSender;
import org.reactivecommons.async.rabbit.listeners.ApplicationReplyListener;

import java.nio.ByteBuffer;
import java.util.Base64;
import java.util.UUID;

@AllArgsConstructor
public class DirectAsyncGatewayConfig {

    private String directMessagesExchangeName;
    private String globalReplyExchangeName;
    private String appName;


    public RabbitDirectAsyncGateway rabbitDirectAsyncGateway(BrokerConfig config, ReactiveReplyRouter router,
                                                             ReactiveMessageSender rSender, MessageConverter converter,
                                                             MeterRegistry meterRegistry) {
        return new RabbitDirectAsyncGateway(config, router, rSender, directMessagesExchangeName, converter,
                meterRegistry);
    }

    public ApplicationReplyListener msgListener(ReactiveReplyRouter router, BrokerConfig config,
                                                ReactiveMessageListener listener, boolean createTopology) {
        final ApplicationReplyListener replyListener = new ApplicationReplyListener(router, listener, generateName(),
                globalReplyExchangeName, createTopology);
        replyListener.startListening(config.getRoutingKey());
        return replyListener;
    }


    public BrokerConfig brokerConfig() {
        return new BrokerConfig();
    }


    public ReactiveReplyRouter router() {
        return new ReactiveReplyRouter();
    }

    public String generateName() {
        UUID uuid = UUID.randomUUID();
        ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
        bb.putLong(uuid.getMostSignificantBits())
                .putLong(uuid.getLeastSignificantBits());
        // Convert to base64 and remove trailing =
        return this.appName + encodeToUrlSafeString(bb.array())
                .replace("=", "");
    }

    public static String encodeToUrlSafeString(byte[] src) {
        return new String(encodeUrlSafe(src));
    }

    public static byte[] encodeUrlSafe(byte[] src) {
        if (src.length == 0) {
            return src;
        }
        return Base64.getUrlEncoder().encode(src);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy