我一直试图在网上澄清这个问题一段时间没有成功,所以我会试着在这里问一下.
我想找到一些资源或示例,它展示了我如何构建端到端完全反压的REST服务+客户端.我的意思是,我希望看到,给定一个实现Reactive Streams的REST客户端(无论是在Akka,JS还是其他),我将拥有(并能够"可视化")整个处理过程中的背压.构建REST服务器,例如使用Akka-Http.
为了清楚起见,我正在寻找类似下面的话题(但我找不到幻灯片或视频来确认):http://oredev.org/2014/sessions/reactive-streaming-restful-applications-with-akka -http
我对大多数示例的怀疑是关于这样一个事实:我可以找到很多案例,其中REST服务(服务器)使用Akka Http和Akka流作为后端,但我不确定背压是通过HTTP"通信"的和REST,如果客户端正在实现Reactive Streams.在这种情况下,我是否可以通过TCP/HTTP或仅仅2个独立的流桥接一个"流"?这是我的主要怀疑和困惑.
希望我足够清楚,有人能够对此事有所了解.
无论如何,谢谢!
我已将Spray Client的示例代码复制到我自己的项目中,以便轻松使用它.我使用IntelliJ 13.
这是我的代码:
package mypackage
import scala.util.Success
import scala.concurrent.duration._
import akka.actor.ActorSystem
import akka.pattern.ask
import akka.event.Logging
import akka.io.IO
import spray.json.{JsonFormat, DefaultJsonProtocol}
import spray.can.Http
import spray.util._
import spray.client.pipelining._
import scala.util.Success
import scala.util.Failure
case class Elevation(location: Location, elevation: Double)
case class Location(lat: Double, lng: Double)
case class GoogleApiResult[T](status: String, results: List[T])
object ElevationJsonProtocol extends DefaultJsonProtocol {
implicit val locationFormat = jsonFormat2(Location)
implicit val elevationFormat = jsonFormat2(Elevation)
implicit def googleApiResultFormat[T :JsonFormat] = jsonFormat2(GoogleApiResult.apply[T])
}
object SprayExample extends App {
// we need an …Run Code Online (Sandbox Code Playgroud) 我正在尝试测试一个拓扑,该拓扑作为最后一个节点,具有 KTable。我的测试使用成熟的 Kafka 集群(通过 confluence 的 Docker 镜像),所以我没有使用TopologyTestDriver.
我的拓扑具有键值类型的输入String -> Customer和String -> CustomerMapped. Serdes、模式以及与模式注册表的集成都按预期工作。
我正在使用 Scala、Kafka 2.2.0、Confluence Platform 5.2.1 和kafka-streams-scala. 我的拓扑尽可能简化,如下所示:
val otherBuilder = new StreamsBuilder()
otherBuilder
.table[String,Customer](source)
.mapValues(c => CustomerMapped(c.surname, c.age))
.toStream.to(target)
Run Code Online (Sandbox Code Playgroud)
(所有隐式 serdes、Produced、Consumed等都是默认的,并且可以正确找到)
我的测试包括同步且不间断地向主题发送一些记录 ( data) ,然后从主题读回,我将结果与:sourcetargetexpected
val data: Seq[(String, Customer)] = Vector(
"key1" -> Customer(0, "Obsolete", "To be overridden", 0),
"key1" -> Customer(0, "Obsolete2", "To be overridden2", 0),
"key1" …Run Code Online (Sandbox Code Playgroud) 我有一个由JFrame frm创建的JDialog dlg,它包含一个JList列表.当我修改列表(通过ListModel)时,列表本身被重新绘制,但不是JDialog.这意味着,如果我删除一行,列表将保留一个空行,而如果我添加一行,则不会显示此新行(因为对话框中没有空格),直到我手动强制重新绘制dlg(双击frm).
根据这篇文章中的建议: 如何在Swing中重新绘制JDialog?
我试图从我的控制器类(这是列表更新的位置)调用,如下所示:
SwingUtilities.getWindowAncestor(dlg).repaint();
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我也尝试过:
dlg.repaint();
Run Code Online (Sandbox Code Playgroud)
没有运气......
任何线索?非常感谢你.
编辑:我的类的组织如下:一个控制器类,包含对主JFrame的引用,frm.我还将JDialog扩展为MyDialog,其中包含一个JList.当检测到双击frm时,我会显示MyDialog的实例(或创建,如果它是我第一次显示它),并且JList填充了传递给DefaultListModel的数据.绘制了MyDialog,使列表只有它所需的空间.现在,当控制器检测到特定事件时,我得到特定的MyDialog,从JList获取ListModel并更新它.这里JList确实更新了,但Dialog保持不变.我使用这样的代码:
MyDialog dlg = group.getDlg();
if(dlg != null){
DefaultListModel listModel = ((DefaultListModel) dlg.getMyJList().getModel());
listModel.addElement(idStock);
SwingUtilities.getWindowAncestor(dlg).repaint();
}
Run Code Online (Sandbox Code Playgroud)
这不会重绘dlg.我也尝试过:
SwingUtilities.getWindowAncestor(dlg.getMyJList()).repaint();
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我检查了调试器实际执行的行.
我没有更多的代码可以显示,真的......