0

我正在构建一个 Quarkus 应用程序,它使用 resteasy 处理 http 请求并使用 restclient 调用另一个 api,我需要传播一个标头并动态添加另一个,所以我添加了一个实现 ClientHeadersFactory 的类。

这是代码:

@ApplicationScoped
public abstract class MicroServicesHeaderHandler implements ClientHeadersFactory {

    @Inject
    MicroServicesConfig config;

    @Override
    public MultivaluedMap<String, String> update(MultivaluedMap<String, String> incomingHeaders,
                                                 MultivaluedMap<String, String> clientOutgoingHeaders) {

        // Will be merged with outgoing headers
        return new MultivaluedHashMap<>() {{
            put("Authorization", Collections.singletonList("Bearer " + config.getServices().get(getServiceName()).getAccessToken()));
            put("passport", Collections.singletonList(incomingHeaders.getFirst("passport")));
        }};
    }

    protected abstract String getServiceName();

我的问题是配置的注入不起作用。我尝试了@Inject@Context,如ClientHeadersFactory. 我也试图使类非抽象,但它没有改变任何东西。

MicroServicesConfig 是一个@Startupbean,因为它需要在Quarkus.run()调用之前进行初始化,否则热重载不再起作用,因为它需要处理请求。这是代码仅供参考:

@Getter
@Startup
@ApplicationScoped
public final class MicroServicesConfig {
    
    private final Map<String, MicroService> services;

    MicroServicesConfig(AKV akv, ABS abs) {
                
        // some code to retrieve an encrypted file from a secure storage, decrypt it and initialize the map out of it
    }

这似乎是一个问题,ClientHeadersFactory因为如果我在我的主类()中注入我的 bean @QuarkusMain,它就可以工作。然后我可以将地图分配给一个公共静态地图,然后我可以从我的 HeaderHandler 访问它,Application.myPublicStaticMap但这很难看,所以我真的更愿意避免这种情况。

我在网上搜索过,发现有几个人有同样的问题,但根据这篇博文或这篇博文,它应该从Quarkus 1.3 和 MicroProfile 3.3 (RestClient 1.4) 开始工作,我正在使用 Quarkus 1.5.2。即使是第二个链接中的示例也不适用于注入 UriInfo ,因此问题不是来自我尝试注入的 bean。

我已经为此苦苦挣扎了好几个星期,现在我真的很想摆脱我的解决方法。我可能只是错过了一些东西,但这让我发疯。

在此先感谢您的帮助。

4

1 回答 1

0

这个问题终于在 Quarkus 1.8 中得到解决。

于 2020-10-02T22:45:01.843 回答