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

Blade 未结 2 190
武林
武林 剑童 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条回答
  • 2024-08-22 20:43

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

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


    0 讨论(0)
  • 2024-08-23 12:58

    我试了下,断点就是不会走这个新加的配置类ProtoStuffSerializerAutoConfiguration,进入的是RedisTemplateConfiguration配置感觉ProtoStuffSerializerAutoConfiguration配置类好像在Biz中好像就不会执行

    image.png


    如果实在不能不能找到问题解决的话,如果直接改blade-starter-redis的RedisTemplateConfiguration类加上上面的逻辑是不是也可以解决.
    因为这个类目前Biz失效的项目一定会走的,不过也很想知道为啥连上面那个测试的好像都不执行比较奇怪
    @AutoConfiguration(before= RedisTemplateConfiguration.class)
    public class ProtoStuffSerializerAutoConfiguration implements BladeRedisSerializerConfigAble {
        @Override
        public RedisSerializer<Object> redisSerializer(BladeRedisProperties properties) {
           if (BladeRedisProperties.SerializerType.ProtoStuff == properties.getSerializerType()) {
              return new ProtoStuffSerializer();
           }
           return defaultRedisSerializer(properties);
        }
    }


    image.png


    作者追问:2024-08-23 15:53

    你试试blade-demo工程下新增配置类是否可以生效, 我这边是可以的。再看看你自己新建的包名是否有做对应的扫描

    CleanShot20240823155159@2x.png

    CleanShot20240823155258@2x.png

    回答: 2024-09-14 20:03

    在demo中试过了没有用,因为之前新建工程就是照着demo来建立的工程,后来就是按照上面那种方式暂时处理的.

    image.png

    作者追问:2024-09-14 20:08

    0 讨论(0)
提交回复