首页 > 解决方案 > Redis PUBSUB OnMessage ClassNotfound 异常

问题描述

我正在尝试在 Redis pubsub OnMessage 函数中使用 RMap.get() 但它会生成 classNotFound 异常,我已经在同一个类的多个方法中使用了这个方法并且它在那里工作正常。我错过了什么吗?

引起:java.io.IOException: java.lang.ClassNotFoundException: com.sibisoft.northstar.pms.VoiceMailExtRequestDTO at org.redisson.codec.SerializationCodec$1.decode(SerializationCodec.java:62) at org.redisson.client.handler .CommandDecoder.decode(CommandDecoder.java:378) 在 org.redisson.client.handler.CommandDecoder.decodeCommand(CommandDecoder.java:196) 在 org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:134) 在org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:104) at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501) at io.netty.handler.codec.ReplayingDecoder.callDecode( ReplayingDecoder.java:366) 在 io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) 在 io.netty.channel.AbstractChannelHandlerContext。在 io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) 在 io.netty.channel.DefaultChannelPipeline 调用ChannelRead(AbstractChannelHandlerContext.java:379) $HeadContext.channelRead(DefaultChannelPipeline.java:1410) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) 在 io.netty。 channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714) 在 io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) 在 io.netty.channel.nio.NioEventLoop 的 io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) .run(NioEventLoop.java:493) 在 io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) 在 io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) 。 .. 还有 2 个

在这种方法中工作正常:

private synchronized void addToRequestQueue(VoiceMailExtRequestDTO request){
    voiceMailRequestsList = voiceMailRequests.get(0, reqeustThread.siteId);
}

调用 onMessage():

@Override
public void onMessage(CharSequence channel, String object) {
vmRequests.get(0, reqeustThread.siteId)
}

获取功能:

public V get(int tenantId, Object key) throws RedisException {
        if (rMap && isRedisConfigured) {
        try{
            redisMap = getRMap(tenantId);
            return redisMap.get(key);
        }catch(RedisException e){
            logger.error("redisson client exception: "+ e.getMessage());
            e.printStackTrace();
        }
        return null;
        } else if (!isMultitenancyConfigured) {
            return super.get(key);
        } else {
            return localMap.get(new Integer(tenantId), key);
        }
        
}
private RMap<K, V> getRMap(int tenantId) {
        if (localCache) {
            return client.getLocalCachedMap(mapName + tenantId, defaults());
        } else {
            return client.getMap(mapName + tenantId);
        }
}

标签: javaredispublish-subscriberedisson

解决方案


推荐阅读