当前位置: 首页 > 知识库问答 >
问题:

Micronaut声明性HttpClient超时

严升
2023-03-14

我有一个声明式客户端:

@Retryable(attempts = "5", multiplier = "1.2")
@Client("\${client-url}")
@Headers(
    Header(name = USER_AGENT, value = "Micronaut Http Client"),
)
interface MyApiClient {

    @Get("/locations?location={location}")
    suspend fun validationLocation(@QueryValue location: String) : LocationResponse
}

我已使用以下命令将客户端超时设置为30秒:

micronaut:
 http:
    client:
      read-timeout: 30s

我随机得到:

Client <package> received HTTP error response: Read Timeout
    2021-08-02T23:09:13.069278169Z io.micronaut.http.client.exceptions.ReadTimeoutException: Read Timeout
    2021-08-02T23:09:13.069283269Z  at io.micronaut.http.client.exceptions.ReadTimeoutException.<clinit>(ReadTimeoutException.java:26)
    2021-08-02T23:09:13.069287569Z  at io.micronaut.http.client.netty.DefaultHttpClient$11.exceptionCaught(DefaultHttpClient.java:2301)
    2021-08-02T23:09:13.069291069Z  at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:302)
    2021-08-02T23:09:13.069306269Z  at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:281)
    2021-08-02T23:09:13.069309969Z  at io.netty.channel.AbstractChannelHandlerContext.fireExceptionCaught(AbstractChannelHandlerContext.java:273)
    2021-08-02T23:09:13.069313269Z  at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireExceptionCaught(CombinedChannelDuplexHandler.java:424)
    2021-08-02T23:09:13.069316669Z  at io.netty.channel.ChannelHandlerAdapter.exceptionCaught(ChannelHandlerAdapter.java:92)
    2021-08-02T23:09:13.069319769Z  at io.netty.channel.CombinedChannelDuplexHandler$1.fireExceptionCaught(CombinedChannelDuplexHandler.java:145)
    2021-08-02T23:09:13.069323069Z  at io.netty.channel.ChannelInboundHandlerAdapter.exceptionCaught(ChannelInboundHandlerAdapter.java:143)
    2021-08-02T23:09:13.069326169Z  at io.netty.channel.CombinedChannelDuplexHandler.exceptionCaught(CombinedChannelDuplexHandler.java:231)
    2021-08-02T23:09:13.069329469Z  at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:302)
    2021-08-02T23:09:13.069332669Z  at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:281)
    2021-08-02T23:09:13.069335869Z  at io.netty.channel.AbstractChannelHandlerContext.fireExceptionCaught(AbstractChannelHandlerContext.java:273)
    2021-08-02T23:09:13.069339069Z  at io.netty.handler.timeout.ReadTimeoutHandler.readTimedOut(ReadTimeoutHandler.java:98)
    2021-08-02T23:09:13.069342369Z  at io.netty.handler.timeout.ReadTimeoutHandler.channelIdle(ReadTimeoutHandler.java:90)

这种令人讨厌的行为的原因是什么?

共有2个答案

黄元章
2023-03-14

显然,从函数中删除suspend,并使其返回单个

洪鸿博
2023-03-14

这个问题似乎涉及同一个问题:Micronaut ReadTimeoutException

显然该配置没有被注入。您可能必须以编程方式设置它。

 类似资料:
  • 我将使用来自Micronaut文档(声明性Http客户端)的代码-我正在使用Spock 宠物手术。JAVA 我有一个声明式客户端: 我的目标是当我运行一个测试类时,我想调用(@Replaces)另一个类(PetDummy),而不是PetClient,PetDummy类位于我的测试文件夹中 测试类: 然而,在调用PetClient的最后,我也尝试了@Factory注释,但没有成功 PetClient

  • API引用 在 1.4 版更改: 声明系统的基本结构现在直接成为SQLAlchemy ORM的一部分。有关这些组件,请参见: declarative_base() declared_attr has_inherited_table() synonym_for() sqlalchemy.orm.as_declarative() 见 声明性扩展 对于其余的声明性扩展类。

  • 我正在Micronaut中编写一个java库模块,它有一个http客户端。这个想法是我的微服务将使用这个库作为jar依赖项并使用http客户端。 问题陈述:我想在不使用 的情况下配置我的 HttpClient。 为什么我不想用application.yml?-因为使用此库的微服务也将拥有自己的< code>application.yml,并且在构建jar时,需要合并两个< code>applica

  • 我想通过客户端注释获得HttpClient,因此由Micronaut管理。但是,这样我就不能使用属性文件中的url: 是否允许Micronaut管理HttpClient,同时仍然使用来自我的application.yml的url?

  • 我正在发送一个请求到一个服务器,它给了我一个200,没有身体(完全可以接受),但是我无法解决如何配置micronaut注释来处理这个问题。无论我尝试什么,它都试图将空响应解码为JSON(至少我认为这是它正在做的,因为它给出了一个意想不到的错误,而不是当身体出错时得到的正常杰克逊错误)。我在微型文档中找不到任何关于如何做到这一点的东西。

  • 我希望能够使用Micronaut的声明性客户端,根据我是在本地开发环境还是在生产环境中,找到不同的endpoint。 我在中设置客户端的基本uri: 阅读来自Micronaut的文档,他们让开发人员跳过了相当多的障碍,将动态值输入到实际客户端。它们实际上很混乱。所以我创建了这样的配置: 但是正如您所看到的,这实际上并不是从中读取任何值,它只是将const值设置为类的静态值。我希望值根据我所处的环境