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

org.ameba.tenancy.amqp.TenantAmqpConfiguration Maven / Gradle / Ivy

There is a newer version: 4.1.0-jdk17
Show newest version
package org.ameba.tenancy.amqp;

import org.ameba.amqp.MessageHeaderEnhancer;
import org.ameba.amqp.MessagePostProcessorProvider;
import org.ameba.annotation.ExcludeFromScan;
import org.ameba.tenancy.TenantHolder;
import org.ameba.tenancy.TenantMdc;
import org.aopalliance.intercept.MethodInterceptor;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;

/**
 * A TenantAmqpConfiguration is a Spring configuration class that is activated with AMQP support and bootstraps beans to propagate context
 * information over AMQP.
 *
 * @author matjaz
 */
@ExcludeFromScan
@ConditionalOnClass(org.springframework.amqp.rabbit.core.RabbitTemplate.class)
@AutoConfiguration
public class TenantAmqpConfiguration {

    public static final String TENANT_AMPQ_HEADER = "owms_tenant";

    @Bean
    public MessagePostProcessorProvider tenantAmqpHeaderResolver() {
        return new TenantAmqpHeaderResolver();
    }

    @Bean
    public MessageHeaderEnhancer tenantAmpqHeaderEnhancer() {
        return new TenantAmpqHeaderEnhancer();
    }

    @Bean
    @ConditionalOnBean(SimpleRabbitListenerContainerFactory.class)
    MethodInterceptor interceptor(SimpleRabbitListenerContainerFactory factory) {
        MethodInterceptor interceptor = invocation -> {
            try {
                TenantMdc.setContext(TenantHolder.getCurrentTenant());
                return invocation.proceed();
            } finally {
                TenantMdc.clearContext();
            }
        };
        factory.setAdviceChain(interceptor);
        return interceptor;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy