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

com.github.liaomengge.base_common.mq.rabbitmq.sender.SimpleMQSender Maven / Gradle / Ivy

The newest version!
package com.github.liaomengge.base_common.mq.rabbitmq.sender;

import com.github.liaomengge.base_common.mq.consts.MetricsConst;
import com.github.liaomengge.base_common.mq.rabbitmq.domain.QueueConfig;
import com.github.liaomengge.base_common.mq.rabbitmq.monitor.DefaultMQMonitor;
import com.google.common.collect.ImmutableMap;
import lombok.NonNull;
import lombok.Setter;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.retry.support.RetryTemplate;

import java.util.List;
import java.util.Map;

/**
 * Created by liaomengge on 17/1/5.
 */
public class SimpleMQSender extends BaseMQSender {

    @Setter
    @NonNull
    private QueueConfig queueConfig;

    public SimpleMQSender(CachingConnectionFactory cachingConnectionFactory, RabbitAdmin rabbitAdmin,
                          RetryTemplate retryTemplate, RabbitTemplate.ConfirmCallback confirmCallback,
                          RabbitTemplate.ReturnCallback returnCallback, boolean mandatory,
                          DefaultMQMonitor mqMonitor) {
        super(cachingConnectionFactory, rabbitAdmin, retryTemplate, confirmCallback, returnCallback, mandatory,
                mqMonitor);
    }

    public SimpleMQSender(CachingConnectionFactory cachingConnectionFactory, RabbitAdmin rabbitAdmin,
                          MessageConverter messageConverter, List messagePostProcessors,
                          RetryTemplate retryTemplate, RabbitTemplate.ConfirmCallback confirmCallback,
                          RabbitTemplate.ReturnCallback returnCallback, boolean mandatory,
                          DefaultMQMonitor mqMonitor) {
        super(cachingConnectionFactory, rabbitAdmin, messageConverter, messagePostProcessors, retryTemplate,
                confirmCallback, returnCallback, mandatory, mqMonitor);
    }

    @Override
    protected void initBinding() {
        if (StringUtils.isBlank(this.queueConfig.getExchangeName()) || ArrayUtils.isEmpty(this.queueConfig.buildQueueNames())) {
            log.error("目标队列为空/交换机为空/队列数为空, 无法初始化绑定, 请检查配置!");
            return;
        }
        DirectExchange directExchange = new DirectExchange(this.queueConfig.getExchangeName(), true, false);
        this.rabbitAdmin.declareExchange(directExchange);
        Queue queue;
        Binding binding;
        Map arguments = ImmutableMap.of("x-ha-policy", "all");
        for (String queueName : this.queueConfig.buildQueueNames()) {
            queue = new Queue(queueName, true, false, false, arguments);
            this.rabbitAdmin.declareQueue(queue);
            binding = BindingBuilder.bind(queue).to(directExchange).with(super.buildRouteKey(queueName));
            this.rabbitAdmin.declareBinding(binding);
        }
    }

    @Override
    public void convertAndSend(int routeKeyHash, Object object) {
        this.convertAndSend(queueConfig.buildRouteKey(routeKeyHash), object);
    }

    @Override
    public void convertAndSend(String routingKey, Object object) {
        this.convertAndSend(this.queueConfig.getExchangeName(), routingKey, object);
    }

    @Override
    public void convertAndSend(String exchangeName, String routingKey, Object object) {
        mqMonitor.monitorCount(MetricsConst.ENQUEUE_COUNT + "." + exchangeName);
        rabbitTemplate.convertAndSend(exchangeName, routingKey, object);
    }

    @Override
    public void convertAndSend2(String queueName, Object object) {
        this.convertAndSend2(this.queueConfig.getExchangeName(), super.buildRouteKey(queueName), object);
    }

    @Override
    public void convertAndSend2(String exchangeName, String queueName, Object object) {
        this.convertAndSend(exchangeName, super.buildRouteKey(queueName), object);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy