我是Emacs的新手.我想安装一个包,但是M-x package-install说没有这样的命令.
试图查看安装的软件包也M-x list-packages不起作用.GNU Emacs手册没有说太多(或者我看错了地方),由于我有限的Emacs知识,我无法想出有意义的搜索关键词.
TLDR:当我有一个传出的http请求作为流的一部分时,是否更好地为每个请求实现一个流(即使用短期流)或跨请求使用单个流实现?
详细信息:我有一个典型的服务,它接受HTTP请求,将其分散到多个第三方下游服务(不受我控制),并在发送回来之前聚合结果.我正在使用akka-http进行客户端实现并为服务器进行喷涂(遗留,随着时间推移将转移到akka-http).示意图:
request -> map -1-*-> map -> 3rd party http -> map -*-1> aggregation -> response
这可以通过为每个请求实现流或实现(部分)流一次并在请求之间共享来实现.
每个请求的实现产生实现开销1,并且不清楚如何利用连接池.这里描述了这个问题(许多实现可能会耗尽池).我可以像这里一样在长时间运行的http流中包装一个池并包装在mapAsync"上游"中,但错误处理策略对我来说并不清楚.当单个请求失败并且流终止时,它是否会取消池?此外,似乎我需要协调请求和响应,因为它们不会按顺序返回.
// example of stream per request
val connectionFlow = Http().cachedHostConnectionPool[UUID](host, port)
val httpFlow: Flow[HttpRequest, Try[HttpResponse], NotUsed] =
Flow[HttpRequest]
.map(req => req -> UUID.randomUUID()) // I don't care about id because it's a single request per stream.
.via(connectionFlow)
.map { case (response, _) => response }
val result = Range(1 …Run Code Online (Sandbox Code Playgroud) 我为IntelliJ使用SBT插件,我使用以下构建设置创建了一个scala项目:Build.scala:
lazy val root =
Project("root", file("."))
.configs( IntegrationTest )
.settings( Defaults.itSettings : _*)
Run Code Online (Sandbox Code Playgroud)
build.sbt:
<setting some parameters>
libraryDependencies += "org.scalatest" % "scala-test_2.10" % "1.0.8" % "test,it"
Run Code Online (Sandbox Code Playgroud)
现在我最终得到了src/main,src/test并且src/it在我的项目结构中.我现在可以运行compile,test并it:test从IntelliJ和SBT repl中的SBT控制台运行.所以在这一点上一切都很好.
我还没弄清楚的唯一问题是如何调试集成测试.我添加了一个test:compile在启动之前运行的scalatest配置,这让我开始进行单元测试调试.我尝试为集成测试创建一个新的Debug配置,但无法弄清楚如何指向它src/it来查找测试.我尝试通过将"Test kind"更改为类并指向特定的测试类来调试特定测试,但是仍然遇到以下异常:
Unable to load a Suite class. This could be due to an error in your runpath. Missing class: it.AddPersonSpec
java.lang.ClassNotFoundException: it.AddPersonSpec
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at …Run Code Online (Sandbox Code Playgroud) 我正在生成一些测试数据如下:
trait Template {
val field1: Map[List[String], Map[Int, List[Boolean]]] //the type is for illustration. Think of it as a 'monstrous type definition'
val field2: Map[List[Int], Map[Double, List[Option[String]]]]
}
object Fixture extends Template {
override val field1 = Map()
override val field2 = Map()
}
Run Code Online (Sandbox Code Playgroud)
这个消息失败了value field1 has incompatible type,同上field2吗?
我可以通过Fixture显式提供类型来修复它,但我试图避免这种情况,因为如果我在特征中更改了一个类型,我将需要将它传播到每个fixture对象.
可我的object Fixture推断类型field1和field2距离trait Template.
我在一个复杂的Java应用程序中遇到的问题归结为以下几点:主线程在子线程未完成之前不会继续,尽管我认为应该这样做.示例问题的代码如下所示:
public class ThreadTest {
static class MyThread extends Thread{
public void run(){
for(double i = 0; i<1; i+=0.01){
System.out.println(Math.pow(Math.PI,Math.E)*100.0*i-234.0);
}
}
}
public static void main(String[] args){
(new MyThread()).run();
System.out.println("main thread");
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个程序时,我总是首先从MyThread获取输出(独立于循环中有多少步骤),然后我从主线程获取消息.创建线程的想法是异步执行代码,但在这里我观察到一个明显同步的行为.我错过了什么?
提前致谢!
似乎没有办法做到这一点.有一个"删除行"功能,但不适用于行中的面板.作为一种解决方法,我创建了一个新行,在那里移动面板然后删除,我认为这太过分了.
我使用Ruby pg gem在事务中运行了几个sql语句.我遇到的问题是由于防火墙设置,连接超时了这些查询.这里提出的解决方案不起作用,因为它需要jdbc连接字符串,而我在Ruby中(jRuby不是一个选项).将驱动程序移动到AWS以删除防火墙也不是一种选择.
我的代码如下:
conn = RedshiftHelper.get_redshift_connection
begin
conn.transaction do
# run my queries
end
ensure
conn.flush
conn.finish
end
Run Code Online (Sandbox Code Playgroud)
我现在正在研究PG异步API.我想知道我是否可以使用is_busy来防止防火墙超时,或者是那种效果.我找不到关于这个主题的好文档.感谢任何提示.
PS:我已经为单个查询解决了这个问题 - 我可以异步触发它并使用系统STV_INFLIGHT Redshift table来跟踪它的完成.事务不会以这种方式工作,因为我必须保持连接打开.
scala ×3
akka-http ×1
akka-stream ×1
elpa ×1
emacs ×1
emacs23 ×1
grafana ×1
java ×1
monitoring ×1
package ×1
pg ×1
ruby ×1
sbt ×1
unit-testing ×1