Skip to content

Commit 4d22b80

Browse files
committed
feat: 添加通用 RabbitMq 消息转换器
1 parent c0f749f commit 4d22b80

1 file changed

Lines changed: 63 additions & 0 deletions

File tree

  • common/plugin/mq/src/main/java/com/github/cadecode/uniboot/common/plugin/mq/rabbit
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.github.cadecode.uniboot.common.plugin.mq.rabbit;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import lombok.extern.slf4j.Slf4j;
5+
import org.springframework.amqp.core.Message;
6+
import org.springframework.amqp.core.MessageProperties;
7+
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
8+
import org.springframework.amqp.support.converter.MessageConversionException;
9+
import org.springframework.amqp.support.converter.SimpleMessageConverter;
10+
import org.springframework.amqp.support.converter.SmartMessageConverter;
11+
import org.springframework.stereotype.Component;
12+
13+
import java.lang.reflect.Type;
14+
15+
/**
16+
* 通用 RabbitMq 消息转换器
17+
* 支持常见两种形式 text 与 json
18+
*
19+
* @author Cade Li
20+
* @since 2023/8/18
21+
*/
22+
@Slf4j
23+
@RequiredArgsConstructor
24+
@Component
25+
public class RabbitConverter implements SmartMessageConverter {
26+
27+
private final SimpleMessageConverter simpleMessageConverter = new SimpleMessageConverter();
28+
private final Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter();
29+
30+
@Override
31+
public Message toMessage(Object object, MessageProperties messageProperties) throws MessageConversionException {
32+
return toMessage(object, messageProperties, null);
33+
}
34+
35+
@Override
36+
public Message toMessage(Object object, MessageProperties messageProperties, Type genericType) throws MessageConversionException {
37+
if (object instanceof byte[] || object instanceof String) {
38+
return simpleMessageConverter.toMessage(object, messageProperties, genericType);
39+
}
40+
return jackson2JsonMessageConverter.toMessage(object, messageProperties, genericType);
41+
}
42+
43+
@Override
44+
public Object fromMessage(Message message) throws MessageConversionException {
45+
return fromMessage(message, null);
46+
}
47+
48+
@Override
49+
public Object fromMessage(Message message, Object conversionHint) throws MessageConversionException {
50+
MessageProperties properties = message.getMessageProperties();
51+
if (properties == null) {
52+
return message.getBody();
53+
}
54+
String contentType = properties.getContentType();
55+
if (contentType != null && contentType.startsWith("text")) {
56+
return simpleMessageConverter.fromMessage(message);
57+
}
58+
if (contentType != null && contentType.equals(MessageProperties.CONTENT_TYPE_JSON)) {
59+
return jackson2JsonMessageConverter.fromMessage(message, conversionHint);
60+
}
61+
return message.getBody();
62+
}
63+
}

0 commit comments

Comments
 (0)