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

com.solace.spring.cloud.stream.binder.util.ErrorQueueInfrastructure Maven / Gradle / Ivy

package com.solace.spring.cloud.stream.binder.util;

import com.solace.spring.cloud.stream.binder.properties.SolaceConsumerProperties;
import com.solacesystems.jcsmp.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.MessagingException;

@Slf4j
public class ErrorQueueInfrastructure {
    private final JCSMPSessionProducerManager producerManager;
    private final String producerKey;
    private final String errorQueueName;
    private final SolaceConsumerProperties consumerProperties;
    private final XMLMessageMapper xmlMessageMapper = new XMLMessageMapper();

    public ErrorQueueInfrastructure(JCSMPSessionProducerManager producerManager, String producerKey,
                                    String errorQueueName, SolaceConsumerProperties consumerProperties) {
        this.producerManager = producerManager;
        this.producerKey = producerKey;
        this.errorQueueName = errorQueueName;
        this.consumerProperties = consumerProperties;
    }

    public void send(MessageContainer messageContainer, ErrorQueueRepublishCorrelationKey key) throws JCSMPException {
        XMLMessage xmlMessage = xmlMessageMapper.mapError(messageContainer.getMessage(), consumerProperties);
        xmlMessage.setCorrelationKey(key);
        Queue queue = JCSMPFactory.onlyInstance().createQueue(errorQueueName);
        XMLMessageProducer producer;
        try {
            producer = producerManager.get(producerKey);
        } catch (Exception e) {
            String msg = String.format("Failed to get producer to send message %s to queue %s",
                    xmlMessage.getMessageId(), errorQueueName);
            log.warn(msg, e);
            throw new MessagingException(msg, e);
        }

        producer.send(xmlMessage, queue);
    }

    public ErrorQueueRepublishCorrelationKey createCorrelationKey(MessageContainer messageContainer,
                                                                  FlowReceiverContainer flowReceiverContainer) {
        return new ErrorQueueRepublishCorrelationKey(this, messageContainer, flowReceiverContainer);
    }

    public String getErrorQueueName() {
        return errorQueueName;
    }

    public long getMaxDeliveryAttempts() {
        return consumerProperties.getErrorQueueMaxDeliveryAttempts();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy