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

将响应处理程序与VertX中的请求匹配

严安志
2023-03-14

假设我在1..n个VertX(V)实例前面有一个负载均衡器(LB),每个VertX实例都连接到一个队列(Q),我有1..m个后端(BE)。

用户点击一个按钮发出post请求,甚至打开一个web套接字,负载均衡器将请求转发给VertX实例之一,VertX实例向队列发出请求,一个后端使用该消息并返回响应;如果正确的VertX实例使用了它,它可以查找响应处理程序并向用户写入响应;如果错误的VertX实例使用了它,则不会有响应处理程序向其写入响应,用户将无限期地等待响应。

看这张草图:

queue.handler { q ->

  q.handler {
    val handler = someMap.get(q.guid)
    // only respond if handler exists
    if (handler != null){
        handler.writeResponse(someresponsemessagehere)
    }
  }

}

vertx.createHttpServer().websocketHandler { ws ->
  val guid = generateGUID()
  someMap.put(guid, ws)                                                                    
  ws.writeFinalTextFrame("guid=${guid}")
  ws.handler { 
    val guid = extractGuid(it)
    // send request to BE including generated GUID
    sendMessageToBE(guid, "blahblah")
  }

}.requestHandler { router.accept(it) }.listen(port)

VertX似乎已经很好地处理了异步操作,在VertX中有没有一种方法可以识别每个websocket连接,而不必维护映射到websocket处理程序/后处理程序的GUID的映射?

另外,参照图片,V3是否有一种方法可以使用消息,但仍然能够将响应写回当前连接到V2的websocket处理程序?

共有1个答案

慎志国
2023-03-14

图中缺少的是Vertx EventBus。

基本上你可以假设你的V1...VN是互连的:

V1<->V2<->...<->Vn

让我们假设Va接收到针对Vb的出站Q消息(红线)。
然后它应该使用EventBus将其发送到Vb:

eventBus.send("Vb UUID", "Message for Vb, also containing WebSocket UUID", ar -> {
  if (ar.succeeded()) {
    // All went well
  }
  else {
    // Vb died or has other problems. Your choice how to handle this
  }
});
 类似资料:
  • 我正在编写一个Netty应用程序(Netty 4),其中处理每条消息可能需要一些时间。作为我的意思的一个例子,我创建了一个,它用原始消息响应,尽管有时会在短时间延迟后响应: 使用此代码,不能保证响应的顺序与传入请求的顺序相同。事实上,如果第一条消息由字符串“delay”和其他字符串的第二条组成,则响应的顺序将颠倒!我写了一个测试来说明这一点: 我正在寻找Netty中的内置方式,以确保传出响应的顺序

  • 我一直试图向facebook发送HTTP POST请求,但没有成功。我从服务器收到以下响应: HTTP/1.1 400不良请求内容-类型:text/html;charset=utf-8日期:2016年12月10日星期六21:28:17 GMT连接:关闭内容-长度:2959 Facebook |错误 抱歉,出了点问题,我们正在修理,会尽快修好的 我的密码 我做错了什么?

  • 我正在使用Java VertX框架,并尝试使用VertX WebClient和一个简单的HTTP请求加载多个JSON对象。我想并行地做这件事,这样可以加快进程。 我有一个endpoint对象: 在另一个类中,我有以下应该并行处理的函数(源代码): 我不知道如何继续下去。VertX WebClient强制我使用异步处理程序,这意味着我不能直接返回JsonObject。

  • 本文向大家介绍解读PHP的Yii框架中请求与响应的处理流程,包括了解读PHP的Yii框架中请求与响应的处理流程的使用技巧和注意事项,需要的朋友参考一下 一、请求(Requests) 请求: 一个应用的请求是用 yii\web\Request 对象来表示的,该对象提供了诸如 请求参数(译者注:通常是GET参数或者POST参数)、HTTP头、cookies等信息。 默认情况下,对于一个给定的请求,你可

  • 我正在运行VertX HTTP服务器。当内容类型为超文本标记语言/表单时,它可以理解请求,但当我尝试发布JSON数据时,它甚至从未进入请求处理程序。 我需要做些什么才能让Vertx期望JSON吗?是否支持?

  • 我试图使用Spring的新反应类在RESTfulendpoint上进行一些负载测试。我仍在学习这些课程,所以我可能会走错方向,所以如果你知道一条更简单的道路,请将我重定向到一条更容易的道路上。。。 这是我到目前为止的情况。这是groovy代码: 我可以看到三个请求回来了,所以它正在工作。现在,我想对三个请求中的每一个的请求和响应之间的延迟进行计时。如果我可以获得“i”属性,每个循环都可以通过将当前