java Redis MQ在springboot程序中与JDBC存在问题
我试图在springboot程序中使用redis pub/sub作为消息队列
我做了一个Springboot测试,比如:
@Test
void redisTest() {
RedisMQBaseMessage redisMQBaseMessage = new RedisMQBaseMessage();
redisMQBaseMessage.setType(ConstantInfo.ATD_TYPE.PUNCH_LOG);
redisMQBaseMessage.setData(messageData);
String json = JSONObject.toJSONString(redisMQBaseMessage);
log.info("json:{}", json);
stringRedisTemplate.convertAndSend(ConstantInfo.CHANNEL.ATD, json);
}
下面是我的留言:
public void onMessage(Message message, byte[] bytes) {
RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
String msg = serializer.deserialize(message.getBody());
DTO dto= new DTO();
set function...
log.info("The 1 message is:{}", msg);
dataMapper.insert(DTO);
log.info("The 2 message is:{}", msg);
}
在侦听器中,我可以接收第一个日志信息,但插入操作会引发异常
“sql会话未注册同步,因为同步未处于活动状态”
因此,插入操作失败,我无法获取第二个日志信息。所以我尝试了JdbcTemplate而不是mybatis mapper。 它还抛出一个异常“com.mysql.jdbc.Driver Not Found”
但是,如果我在向侦听器发送消息之前在测试中添加了一个DB操作,那么插入操作 在这个过程中,听众会成功:
@Test
void redisTest() {
RedisMQBaseMessage redisMQBaseMessage = new RedisMQBaseMessage();
redisMQBaseMessage.setType(ConstantInfo.ATD_TYPE.PUNCH_LOG);
redisMQBaseMessage.setData(messageData);
String json = JSONObject.toJSONString(redisMQBaseMessage);
log.info("json:{}", json);
dataMapper.select(sql);
stringRedisTemplate.convertAndSend(ConstantInfo.CHANNEL.ATD, json);
}
我的springboot版本是2.4.3
我想知道这种奇怪现象的原因是什么,我该如何解决它
谢谢
共 (0) 个答案