Spring Boot应用K8s重部署后并发请求触发“Cannot inject already loaded type”报错排查求助
Spring Boot应用K8s重部署后并发请求触发“Cannot inject already loaded type”报错排查求助
大家好,我碰到了一个棘手的问题,想请各位帮忙分析下:
第一次把Spring Boot应用部署到K8s集群(6个Pod)时完全正常,但重部署之后,当发起500个并发请求时,有23个请求失败了,报错信息如下:
Generic event exception: Error creating event class: Cannot inject already loaded type: class com.kafka.events.DynamicSampleEvent
我在本地做过压力测试,500个顺序请求完全没有失败的情况,而且已经给动态生成的事件类加了缓存层,代码如下:
eventClassCache = new LinkedHashMap<>(100, 0.75f, true) { protected boolean removeEldestEntry(Map.Entry<String, Class<? extends KafkaPublishEvent<Object>>> eldest) { return size() > 100; } };
生成事件类的核心代码是这样的:
private Class<? extends KafkaPublishEvent<Object>> generateEventClass(String eventType) { String sanitizedEventType = eventType.replaceAll("[^a-zA-Z0-9_.]", ""); try (DynamicType.Unloaded<KafkaPublishEvent> unloadedType = new ByteBuddy() .subclass(KafkaPublishEvent.class) .name("com.kafka.events.Dynamic" + sanitizedEventType + "Event") .make()) { return (Class<? extends KafkaPublishEvent<Object>>) unloadedType .load(getClass().getClassLoader(), ClassLoadingStrategy.Default.INJECTION) .getLoaded(); } catch (Exception e) { throw new EventGenerationException(ERR_0033, "Error creating event class: " + e.getMessage()); } }
我现在怀疑是不是ClassLoadingStrategy的问题?有没有大佬能帮我找找原因?
备注:内容来源于stack exchange,提问作者ShubhamK
相关产品推荐
相关产品推荐

