Bladex和Bladex-Biz使用公共缓存SysCache缓存格式不统一使用异常

Blade 未结 2 411
武林
武林 2024-08-22 19:11
悬赏:5

一、该问题的重现步骤是什么?

1. 调用blade-system的部门详情接口bladex平台这边就会SysCache.getDept(dept.getParentId()) 缓存部门信息

2. Bladex-Biz这边使用 SysCache.getDept(deptId) 就会获取失败 

3. 发现Bladex和Bladex-Biz两边调用SysCache.getDept(deptId) 实际缓存的redis数据格式是不一样的,Bladex这边是protostuff

Bladex-Biz这边是json


主要是目前发现blade.yaml 

blade:

  redis:

    serializer-type: protostuff   的redis配置只对bladex中使用的地方生效,平台端这边调用SysCache.getDept(dept.getParentId()) SysCache使用的是protostuff格式,业务端却是json格式 ,可以咨询下怎么可以让业务端这边也生效blade.yaml 中的blade.redis.serializer-type 配置么,因为发现BladeX-Biz实际存的是json,平台和业务端都是用的时候业务端缓存的,到了平台端Bladex就反序列号就有问题啦,同理平台端缓存的业务端这边是用业务端也会报错.


二、你期待的结果是什么?实际看到的又是什么?

       期待的结果是:

                Bladex和Bladex-Biz都能够跟着配置blade.yaml使用同一个序列化策略

                blade:

                  redis:

                    serializer-type: protostuff

      实际看到的Bladex和Bladex-Biz两边调用SysCache.getDept(deptId) 实际缓存的redis数据格式是不一样的,Bladex这边是protostuff


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

    正在使用的是BladeX 企业版 3.4.0.RELEASE 在macOs系统


四、请提供详细的错误堆栈信息,这很重要。

image.png

image.png

image.png


image.png

image.png

image.png

五、若有更多详细信息,请在下面提供。

2条回答
  •  admin
    admin (楼主)
    2024-08-22 20:43

    先确定biz有没有引入protostuff的依赖,然后在biz项目失效的服务内写一个config类试试,打个断点看看执行的那一个返回。代码如下

    @AutoConfiguration(before = RedisTemplateConfiguration.class)
    public class ProtoStuffSerializerAutoConfiguration implements BladeRedisSerializerConfigAble {
    
        @Bean
        @Override
        public RedisSerializer redisSerializer(BladeRedisProperties properties) {
            if (BladeRedisProperties.SerializerType.ProtoStuff == properties.getSerializerType()) {
               return new ProtoStuffSerializer();
            }
            return defaultRedisSerializer(properties);
        }
    
    }


    提交回复