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

in.hocg.boot.message.autoconfigure.service.normal.AbsMessageQueueBervice Maven / Gradle / Ivy

package in.hocg.boot.message.autoconfigure.service.normal;

import cn.hutool.core.map.MapUtil;
import in.hocg.boot.message.autoconfigure.core.message.TransactionalMessage;
import in.hocg.boot.message.autoconfigure.core.TransactionalMessageContext;
import in.hocg.boot.message.autoconfigure.core.TransactionalMessageBervice;
import in.hocg.boot.web.autoconfiguration.SpringContext;
import org.springframework.messaging.support.MessageBuilder;

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

/**
 * Created by hocgin on 2021/4/9
 * email: [email protected]
 *
 * @author hocgin
 */
public abstract class AbsMessageQueueBervice implements NormalMessageBervice {
    protected static final TransactionalMessageContext MESSAGE_CONTEXT = new TransactionalMessageContext<>();

    @Override
    public boolean syncSend(TransactionalMessage message) {
        final String destination = message.getDestination();
        Map headers = message.getHeaders();
        final MessageBuilder messageBuilder = MessageBuilder.withPayload(message.getPayload());
        if (MapUtil.isNotEmpty(headers)) {
            messageBuilder.copyHeaders(headers);
        }
        return syncSend(destination, messageBuilder.build());
    }

    @Override
    public boolean asyncSend(TransactionalMessage message) {
        final String destination = message.getDestination();
        Map headers = message.getHeaders();
        final MessageBuilder messageBuilder = MessageBuilder.withPayload(message.getPayload());
        if (MapUtil.isNotEmpty(headers)) {
            messageBuilder.copyHeaders(headers);
        }
        return asyncSend(destination, messageBuilder.build());
    }

    @Override
    public void publish(boolean isAsync) {
        final List messages = getMessageContext().getAndClear();
        if (messages.isEmpty()) {
            return;
        }

        final String messageGroupSn = getMessageGroupSn();
        TransactionalMessageBervice messageService = SpringContext.getBean(TransactionalMessageBervice.class);
        for (TransactionalMessage message : messages) {
            message.setGroupSn(messageGroupSn);
            boolean isOk = messageService.insertMessage(message);
            if (isAsync) {
                this.asyncSend(message);
            } else {
                this.asyncSend(message);
            }
        }
    }

    @Override
    public TransactionalMessageContext getMessageContext() {
        return MESSAGE_CONTEXT;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy