Quarkus测试Amazon Lambda时报No virtual channel available错误如何解决
问题根因
你使用了错误的测试依赖,quarkus-test-amazon-lambda是面向普通事件型Lambda的测试组件,不适用于quarkus-amazon-lambda-rest这类REST API Gateway代理的Lambda场景,同时额外添加的轮询配置干扰了Netty虚拟通道的自动初始化流程。
解决方案
步骤1:替换测试依赖
删除原有的quarkus-test-amazon-lambda依赖,替换为REST类型Lambda对应的测试依赖:
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-test-amazon-lambda-rest</artifactId> <scope>test</scope> </dependency>
步骤2:移除无效配置
删除application.properties中的quarkus.lambda.enable-polling-jvm-mode=true配置项,该配置仅用于JVM模式部署到AWS Lambda环境时的轮询场景,本地@QuarkusTest测试无需添加,反而会阻断虚拟通道注册。
步骤3:调整测试用例(可选)
如果只需要验证REST接口逻辑,直接使用RestAssured编写常规JAX-RS测试即可:
@QuarkusTest public class GreetingTest { @Test public void testHelloEndpoint() { given() .when().get("/hello") .then() .statusCode(200) .body(is("hello jaxrs")); } }
如果需要模拟API Gateway事件触发场景,使用LambdaRestClient替代原有的LambdaClient调用即可。
可选优化(MacOS DNS警告消除)
如果是MacOS环境,想要消除开头的DNS警告,添加如下依赖即可:
<dependency> <groupId>io.netty</groupId> <artifactId>netty-resolver-dns-native-macos</artifactId> <classifier>osx-aarch_64</classifier> <!-- 英特尔芯片换为osx-x86_64 --> <scope>test</scope> </dependency>
内容的提问来源于stack exchange,提问作者Jan Gassen
相关产品推荐
相关产品推荐

