gpt4 book ai didi

java - 了解 Armeria 中的装饰器

转载 作者:行者123 更新时间:2023-12-01 19:28:14 24 4
gpt4 key购买 nike

我刚刚开始使用 Armeria,并努力完全理解一些事情。

我实现了 DecoratingHttpServiceFunction 以便通过 Hibernate session 向服务提供请求。

@Override
public HttpResponse serve(HttpService delegate, ServiceRequestContext ctx, HttpRequest req) {
... // setup session for the request context
HttpResponse response = delegate.serve(ctx, req);
... // close session
return response;
}

但显然 session 在实际调用服务之前就关闭了,并且从 delegate.serve 返回的请求是 DeferredHttpResponse 的实例。我的方法是完全错误的还是有更好的方法来做我想做的事?

最佳答案

在 Armeria 中,所有请求和响应都是异步处理的。因此,从代码中的 delegate.serve(ctx, req) 返回并不能保证请求已被完全处理。

要在完全处理请求后执行特定操作,您需要向 delegate.serve(ctx,请求):

@Override
public HttpResponse serve(HttpService delegate, ServiceRequestContext ctx, HttpRequest req) {
... // setup session for the request context
HttpResponse response = delegate.serve(ctx, req);
response.whenComplete().handle((unused1, unused2) -> {
... // close session
});
return response;
}

关于java - 了解 Armeria 中的装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60753064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com