想要做一个redis的消息队列。运行时发现message.getBody()存在乱码
�� t{"env":"hw","group":"job"}
首先做了一下内容
java
// Bean类
@Data
public class ADto{
private String env;
private String group;
}
java
// controller类
@RestController
public class testController{
@Resource
private RedisTemplate redisTemplate;
@ApiOperation("测试redis消息队列")
@PostMapping("/redisTest")
public String redisTest(@RequestBody ADto adto){
redisTemplate.convertAndSend("REDIS_TEST_CHANNEL", JSONObject.toJSONString(adto));
return "发送成功!";
}
}
java
//Service 类
@Service
public class AService{
public void warnNotice(ADto adto){
// 具体处理逻辑
System.println.out("打印:" + adto.toString());
}
}
java
// redis监听器
@Component
public class RedisConfig {
@Bean
public ChannelTopic topic() {
return new ChannelTopic("WARN_NOTICE_CHANNEL");
}
@Bean
public MessageListenerAdapter messageListenerAdapter(WarnListener listener) {
return new MessageListenerAdapter(listener);
}
@Bean
public RedisMessageListenerContainer redisContainer(RedisConnectionFactory redisConnectionFactory,
MessageListenerAdapter messageListenerAdapter,
ChannelTopic topic) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(redisConnectionFactory);
container.addMessageListener(messageListenerAdapter, topic);
return container;
}
@Component
public class WarnListener implements MessageListener {
@Resource
private AExtService AExtService;
private final Object lock = new Object();
@Override
public void onMessage(Message message, byte[] pattern) {
synchronized(lock) {
ADto dto = JSONObject.parseObject(message.getBody(), ADto .class);
AExtService.warnNotice(dto);
}
}
}
运行启动以后,代码在ADto dto = JSONObject.parseObject(message.getBody(), ADto .class);这一行,直接执行结束,打断点以后发现,message.getBody()获取到的内容,不是一个普通的json,而是有乱码的
�� t{"env":"hw","group":"job"}
解决方案:
将
@Resource
private RedisTemplate redisTemplate;
修改为
@Resource
private StringRedisTemplate stringRedisTemplate;