You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Micronaut连接Eureka时出现PortWrapper序列化异常问题

解决Micronaut Eureka注册时PortWrapper序列化异常问题

问题背景

通过命令mn create-app --features=discovery-eureka,graalvm example.micronaut.bookcatalogue --build=maven --lang=java创建的默认项目,启动时无法完成Eureka注册:先多次抛出io.netty.handler.timeout.ReadTimeoutException,最终触发CodecException,提示No serializable introspection present for type PortWrapper portWrapper。

问题原因

Micronaut的序列化内省机制未为Eureka客户端依赖的PortWrapper类生成必要的序列化元数据,且启用GraalVM特性后,默认内省扫描未覆盖到该第三方类,导致序列化失败。

解决方案步骤

1. 补充Jackson序列化依赖

在项目pom.xml中添加完整的Jackson绑定依赖,确保序列化能力覆盖第三方类:

<dependency>
    <groupId>io.micronaut.jackson</groupId>
    <artifactId>micronaut-jackson-databind</artifactId>
    <scope>compile</scope>
</dependency>

2. 配置内省扫描Eureka相关包

在src/main/resources/application.yml中添加配置,让Micronaut内省处理器扫描Netflix Eureka的核心包:

micronaut:
  serialization:
    introspection:
      packages:
        - com.netflix.appinfo

3. 重新编译并启动项目

执行Maven编译命令生成完整的内省元数据:

mvn clean compile

完成后启动项目,验证Eureka注册状态。

备选方案:手动注册PortWrapper内省

若上述步骤无效,可创建配置类手动注册PortWrapper的序列化内省:

package example.micronaut.bookcatalogue;

import com.netflix.appinfo.PortWrapper;
import io.micronaut.context.annotation.Bean;
import io.micronaut.context.annotation.Factory;
import io.micronaut.serde.ObjectMapper;
import io.micronaut.serde.config.SerdeConfiguration;

@Factory
public class EurekaSerializationConfig {

    @Bean
    public ObjectMapper objectMapper(SerdeConfiguration config) {
        ObjectMapper mapper = ObjectMapper.create(config);
        mapper.registerIntrospection(PortWrapper.class, 
            io.micronaut.serde.introspect.Introspector.introspect(PortWrapper.class));
        return mapper;
    }
}

额外检查

  • 确认Eureka服务端已正常启动,且项目配置的eureka.client.service-url.defaultZone与服务端地址一致,排除网络连接导致的ReadTimeoutException。

内容的提问来源于stack exchange,提问作者Henrik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 04:45:56