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

com.liguanqiao.grow.mq.rocket.GrowRocketMessageConverter Maven / Gradle / Ivy

package com.liguanqiao.grow.mq.rocket;

import com.liguanqiao.grow.log.context.TracerContext;
import com.liguanqiao.grow.mq.ReceiversMessageConverter;
import com.liguanqiao.grow.mq.model.MqWrap;
import com.liguanqiao.grow.mq.util.MqSerializeUtil;
import lombok.Getter;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHeaders;
import org.springframework.messaging.converter.MappingJackson2MessageConverter;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Optional;

/**
 * GrowRocketMessageConverter
 *
 * @author liguanqiao
 * @since 2023/1/10
 **/
@Getter
@SuppressWarnings("NullableProblems")
public class GrowRocketMessageConverter extends MappingJackson2MessageConverter implements ReceiversMessageConverter {

    private final TracerContext tracerContext;
    private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;

    public GrowRocketMessageConverter(TracerContext tracerContext) {
        super();
        this.tracerContext = tracerContext;
    }

    @Override
    protected Object convertFromInternal(Message message, Class targetClass, Object conversionHint) {
        MqWrap entity = Optional.of(message.getPayload())
                .filter(String.class::isInstance)
                .map(String.class::cast)
                .map(MqSerializeUtil.castType(MqWrap.class))
                .orElseGet(() -> MqWrap.convert(tracerContext, message.getPayload()));
        trace(entity.getTracerSpan());
        return MqSerializeUtil.castType(targetClass).apply(entity.getContent());
    }

    @Override
    protected Object convertToInternal(Object payload, MessageHeaders messageHeaders, Object conversionHint) {
        return MqSerializeUtil.valueToString()
                .apply(Optional.of(payload)
                        .filter(MqWrap.class::isInstance)
                        .orElseGet(() -> MqWrap.convert(tracerContext, payload)))
                .getBytes(DEFAULT_CHARSET);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy