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

在WebClient中,我可以将请求与响应进行匹配吗?

齐驰
2023-03-14

我试图使用Spring的新反应类在RESTfulendpoint上进行一些负载测试。我仍在学习这些课程,所以我可能会走错方向,所以如果你知道一条更简单的道路,请将我重定向到一条更容易的道路上。。。

这是我到目前为止的情况。这是groovy代码

def token="xyz"

WebClient webClient=WebClient
    .builder()
    //Using google for example purposes only
    .baseUrl("http://google.com")
    //In the real code, there's a lot of extra headers like this one..
    .defaultHeaders({ headers ->
      headers.add(HttpHeaders.AUTHORIZATION,"bearer $token")
    })
    .build()

//This is where load is measured
for (int i:1..3) {
  webClient
      .method(HttpMethod.GET)
      .header("x","y")
      .attribute("i",i)
      .retrieve()
      .bodyToMono(String)
      .subscribe {
        body -> 
          println body
          //Is there any way to get the "i" attribute here to determine the request???
      }
}

sleep 30000
println "done"

我可以看到三个请求回来了,所以它正在工作。现在,我想对三个请求中的每一个的请求和响应之间的延迟进行计时。如果我可以获得“i”属性,每个循环都可以通过将当前时间存储在映射中开始,然后订阅方法可以使用“i”读取映射并将其与当前时间进行比较来计算增量。

我正在考虑的另一个选择是为每个请求创建一个新的WebClient,但会有1000个请求,我想优化性能。

而且,我对最后需要睡眠声明感到不太高兴。。。

使用Reactive类加载测试RESTful服务的最佳方法是什么?

共有1个答案

茹正初
2023-03-14

我决定只使用一大组WebClient对象。在我的情况下,请求吞吐量足够高,足以淹没服务器,并导致请求速度较慢时无法看到的错误。不需要担心属性,而是为循环的每次迭代创建一个新变量来存储开始时间戳。请参见下面的代码

for (int i:1..3) {
  WebClient webClient=WebClient
    .builder()
    //Using google for example purposes only
    .baseUrl("http://google.com")
    //In the real code, there's a lot of extra headers like this one..
    .defaultHeaders({ headers ->
      headers.add(HttpHeaders.AUTHORIZATION,"bearer $token")
    })
    .build()

  //Get timestamp here

  webClient
      .method(HttpMethod.GET)
      .header("x","y")
      .retrieve()
      .bodyToMono(String)
      .subscribe {
        body -> 
          //Get timestamp here and compare with the other timestamp to calculate latency.
      }
}
 类似资料:
  • 假设我在1..n个VertX(V)实例前面有一个负载均衡器(LB),每个VertX实例都连接到一个队列(Q),我有1..m个后端(BE)。 用户点击一个按钮发出post请求,甚至打开一个web套接字,负载均衡器将请求转发给VertX实例之一,VertX实例向队列发出请求,一个后端使用该消息并返回响应;如果正确的VertX实例使用了它,它可以查找响应处理程序并向用户写入响应;如果错误的VertX实例

  • 我正在编写一个Netty应用程序(Netty 4),其中处理每条消息可能需要一些时间。作为我的意思的一个例子,我创建了一个,它用原始消息响应,尽管有时会在短时间延迟后响应: 使用此代码,不能保证响应的顺序与传入请求的顺序相同。事实上,如果第一条消息由字符串“delay”和其他字符串的第二条组成,则响应的顺序将颠倒!我写了一个测试来说明这一点: 我正在寻找Netty中的内置方式,以确保传出响应的顺序

  • 在Vertx WebClient中记录传出http请求和响应的最简单方法是什么。我正在寻找类似于httpserver LoggerHandler的东西,但接下来是webclient的输出请求。

  • 问题内容: 想象我在一个已经有后台线程的服务中。我可以在同一线程中使用Volley发出请求,以便回调同步发生吗? 这样做有两个原因:-首先,我不需要另一个线程,创建它会很浪费。-其次,如果我处于ServiceIntent中,则线程的执行将在回调之前完成,因此,我不会收到Volley的响应。我知道我可以创建自己的Service,该Service具有可以控制的Runloop线程,但是最好在volley

  • 问题内容: 在进行模拟调用之前自动更新时间戳的这种方法的最佳方法是什么? 这是我要测试的一些伪代码: 这是我要测试的内容: 我知道这段代码相当笨拙,但是我认为它准确地描绘了我要验证的内容。我基本上需要一个匹配器来填写测试,以验证时间戳是否在当前时间的X范围内,因此我知道它已正确更新,并且使用该对象的正确时间戳进行了调用。 问题答案: 我发现处理时间紧迫的代码最可靠的方法是将所有时间紧迫的函数包装在

  • 是否可以在webclient上将多个请求链接在一起?例如,我希望在进行交易时能够更新买方和卖方的余额。现在它只更新买家余额: 是否有一种方法可以将两个put方法调用在一起,以便更新两个余额? 更新:此方法适用于将单声道值作为uri变量调用。