首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有用于夸克测试amazon的虚拟通道

没有用于夸克测试amazon的虚拟通道
EN

Stack Overflow用户
提问于 2021-08-31 15:25:49
回答 1查看 146关注 0票数 0

我创建了一个简单的quarkus项目,如文档中所述。

代码语言:javascript
复制
mvn archetype:generate \
       -DarchetypeGroupId=io.quarkus \
       -DarchetypeArtifactId=quarkus-amazon-lambda-rest-archetype \
       -DarchetypeVersion=2.2.1.Final

我只使用以下资源保存JAXRS的内容:

代码语言:javascript
复制
@Path("/hello")
public class GreetingResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "hello jaxrs";
    }
}

然后,通过首先添加lambda测试依赖项,尝试添加这里描述的集成测试:

代码语言:javascript
复制
<dependency>
   <groupId>io.quarkus</groupId>
   <artifactId>quarkus-test-amazon-lambda</artifactId>
   <scope>test</scope>
</dependency>

然后,我按照描述的方式添加了包含application.propertiesquarkus.lambda.enable-polling-jvm-mode=true

最后,我添加了一个简单的测试用例:

代码语言:javascript
复制
@QuarkusTest
public class GreetingTest
{
    @Test
    public void testSimpleLambdaSuccess() {
        InputStream inputStream = Objects.requireNonNull(
                GreetingTest.class.getResourceAsStream("/request.json")
        );

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        LambdaClient.invoke(inputStream, outputStream);
    }
}

request.json文件是我使用sam local generate-event apigateway aws-proxy生成的一个事件,它只是修复了匹配我的资源的路径(尽管这对下面的问题没有影响)。

但是,在运行测试时,总是会出现以下错误:

代码语言:javascript
复制
2021-08-31 17:09:10,108 WARN  [io.net.res.dns.DnsServerAddressStreamProviders] (vert.x-eventloop-thread-5) Can not find io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider in the classpath, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS.
2021-08-31 17:09:10,604 INFO  [io.quarkus] (main) Quarkus 2.2.1.Final on JVM started in 1.867s. Listening on: http://localhost:8081
2021-08-31 17:09:10,604 INFO  [io.quarkus] (main) Profile test activated. 
2021-08-31 17:09:10,604 INFO  [io.quarkus] (main) Installed features: [amazon-lambda, cdi, resteasy, security, smallrye-context-propagation]
2021-08-31 17:09:10,960 ERROR [qua.ama.lam.http] (Lambda Thread) Request Failure: java.lang.RuntimeException: No virtual channel available
    at io.quarkus.netty.runtime.virtual.VirtualClientConnection.connect(VirtualClientConnection.java:113)
    at io.quarkus.amazon.lambda.http.LambdaHttpHandler.nettyDispatch(LambdaHttpHandler.java:204)
    at io.quarkus.amazon.lambda.http.LambdaHttpHandler.handleRequest(LambdaHttpHandler.java:61)
    at io.quarkus.amazon.lambda.http.LambdaHttpHandler.handleRequest(LambdaHttpHandler.java:41)
    at io.quarkus.amazon.lambda.runtime.AmazonLambdaRecorder$1.processRequest(AmazonLambdaRecorder.java:155)
    at io.quarkus.amazon.lambda.runtime.AbstractLambdaPollLoop$1.run(AbstractLambdaPollLoop.java:80)
    at java.base/java.lang.Thread.run(Thread.java:832)

{"statusCode":500,"multiValueHeaders":{"Content-Type":["application/json"]},"body":"{ \"message\": \"Internal Server Error\" }","isBase64Encoded":false}

我尝试通过堆栈跟踪调试一点点,看起来实际上没有注册的netty虚拟通道。

我是遗漏了一些初始化网络虚拟通道的东西,还是做错了什么?任何帮助都很感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-01 14:31:20

在深入研究夸克源之后,我发现了一个类似的集成测试示例。在与我的代码进行比较之后,我发现了application.properties中的一个不同之处

代码语言:javascript
复制
quarkus.http.virtual=true

在这个标志上甚至有一个文档

quarkus.http.virtual 如果这是真的,那么只会为vertx设置一个虚拟通道。我们有这个开关用于测试。

启用此标志后,一切都按预期开始工作!也许从夸克测试的文档中引用这个标志是有帮助的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69001402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档