我试图使用CompletionHandler not Futures在vert.x worker Verticle中的AsynchronousSocketChannel上实现单个请求/响应.从vert.x文档:
"工作者Verticle永远不会被多个线程同时执行."
所以这是我的代码(不确定我的套接字处理100%正确 - 请评论):
// ommitted: asynchronousSocketChannel.open, connect ...
eventBus.registerHandler(address, new Handler<Message<JsonObject>>() {
@Override
public void handle(final Message<JsonObject> event) {
final ByteBuffer receivingBuffer = ByteBuffer.allocateDirect(2048);
final ByteBuffer sendingBuffer = ByteBuffer.wrap("Foo".getBytes());
asynchronousSocketChannel.write(sendingBuffer, 0L, new CompletionHandler<Integer, Long>() {
public void completed(final Integer result, final Long attachment) {
if (sendingBuffer.hasRemaining()) {
long newFilePosition = attachment + result;
asynchronousSocketChannel.write(sendingBuffer, newFilePosition, this);
}
asynchronousSocketChannel.read(receivingBuffer, 0L, new CompletionHandler<Integer, Long>() {
CharBuffer charBuffer = null;
final Charset charset = Charset.defaultCharset();
final CharsetDecoder …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个示例,显示如何在异步HttpHandler中异步编写响应?问题是当调用HttpServerExchange.endExchange时,刷新响应.我的示例HttpHandler使用Scala的rx-java库.
class MyHandler() extends HttpHandler {
override def handleRequest(exchange: HttpServerExchange) = {
val observable = Observable.items(List(1, 2, 3)) // simplistic not long running
observable.map {
// this is run async
myList => exchange.getResponseSender.send(myList.toString)
}
}
}
Run Code Online (Sandbox Code Playgroud) 在带有子模块的多模块构建中,server我编写了一个自定义任务server/build.sbt,其中我想引用baseDirectory根项目.这是任务:
lazy val genData = taskKey[Unit]("generate files")
genData := {
List(
Generator(baseDirectory.value.getParentFile, (resourceDirectory in Compile).value)
).foreach(_.makeData())
}
Run Code Online (Sandbox Code Playgroud)
而不是baseDirectory.value.getParentFile我想写像,(baseDirectory in root).value但这不起作用.有什么建议?
我想改进以下与Cassandra相关的Scala代码.我有两个不相关的用户定义类型,实际上是在Java源文件中(省略了细节).
public class Blob { .. }
public class Meta { .. }
Run Code Online (Sandbox Code Playgroud)
以下是我目前使用Scala的方法:
private val blobMapper: Mapper[Blob] = mappingManager.mapper(classOf[Blob])
private val metaMapper: Mapper[Meta] = mappingManager.mapper(classOf[Meta])
def save(entity: Object) = {
entity match {
case blob: Blob => blobMapper.saveAsync(blob)
case meta: Meta => metaMapper.saveAsync(meta)
case _ => // exception
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但如何避免以下问题
Blob或)时重复MetasaveObject参数类型Cassandra nodetool netstats在其他方面输出以下内容:自服务器重启以来阻止查询的读取修复操作数.
在哪些情况下,读取修复可以阻止(读取?)查询?我认为阅读修理总是在后台运行.
我有一个项目设置为 SBT 多重构建。看起来像这样:
- project
Dependencies.scala
- core
build.sbt
- server
build.sbt
build.sbt
Run Code Online (Sandbox Code Playgroud)
我想用作Dependencies.scala子项目之间共享的库版本号的容器。
sealed trait Dependencies {
val commonsIo = "2.4"
}
object DependencyVersions extends Dependencies
Run Code Online (Sandbox Code Playgroud)
在根 build.sbt 中,我添加了一个Setting分配给每个子项目的文件。
lazy val dependencies = settingKey[Dependencies]("versions")
val defaultSettings = Defaults.coreDefaultSettings ++ Seq(
dependencies := DependencyVersions)
def projectFolder(name: String, theSettings: Seq[Def.Setting[_]] = Nil) = Project(name, file(name), settings = theSettings)
lazy val core = projectFolder("core", defaultSettings)
Run Code Online (Sandbox Code Playgroud)
我无法访问dependencies中的设置core/build.sbt。
"commons-io" % "commons-io" % dependencies.value.commonsIo, <-- doesn't work …Run Code Online (Sandbox Code Playgroud) 我已经使用 Kotlin DSL 建立了一个 Gradle 多项目构建。这是build.gradle.kts在根:
plugins {
kotlin("jvm") version "1.2.70" apply false
}
allprojects {
repositories {
mavenCentral()
}
}
subprojects {
version = "1.0"
}
Run Code Online (Sandbox Code Playgroud)
这是sub/build.gradle.kts在我的子项目中:
plugins {
application
kotlin("jvm")
}
application {
mainClassName = "me.package.MainKt"
}
dependencies {
compile(kotlin("stdlib"))
compile("io.github.microutils:kotlin-logging:1.6.10")
compile("ch.qos.logback:logback-classic:1.2.3")
}
Run Code Online (Sandbox Code Playgroud)
当我运行$ gradle build的application插件创建我的分布sub/build/distribution。
我不需要 zip 发行版,我不想在 tar 发行版中包含版本号。两者在常规中都应该是微不足道的,build.gradle例如:
distZip.enabled = false
distTar.archiveName = "${project.name}.tar"
Run Code Online (Sandbox Code Playgroud)
无论我尝试使用 Kotlin DSL,我都会得到Unresolved reference: distZip. 我如何解决distZip …
我们正在 AWS 中运行基于 openjdk:11-slim 的 docker 容器。我们通常使用两种实例类型。一个有 1G,另一个有 2G 可用内存。在 1G 实例上,我开始使用这些参数来限制堆大小:
-XX:MaxRAM=1g -XX:MaxRAMPercentage=30
我也想限制非堆。它是一个 Spring Boot 应用程序,在 Spring Boot Admin 中它当前看起来像这样(默认运行):
正如您所看到的,1.33 GB Max 甚至无法工作,因为总内存只有 1G。理想情况下,非堆也应限制在 30% 以内。我可以使用哪些 JVM 参数来调整非堆内存的大小?
我进行了一些调查,在这个实例中,大约 1G 总 RAM 的 30% 已用于非应用程序相关进程(第三列是总内存的百分比)。
3663 root 4.6 /usr/bin/python2.7 /usr/bin/aws logs push --config-file /etc/awslogs/awslogs.conf --additional-configs-dir /etc/awslogs/config
3430 root 4.1 /usr/bin/dockerd --storage-driver devicemapper --storage-opt dm.thinpooldev=/dev/mapper/docker-docker--pool --storage-opt dm.use_deferred_removal=true --storage-opt dm.use_deferred_deletion=true --storage-opt dm.fs=ext4 --storage-opt dm.basesize=100G
2949 healthd 3.5 puma 2.11.1 (tcp://127.0.0.1:22221) [healthd]
3021 root 2.6 /usr/bin/python2.7 /opt/aws/bin/cfn-hup
3437 root 2.2 …Run Code Online (Sandbox Code Playgroud) 头脑风暴:我正在开发一个Scala项目,我们在那里进行服务调用,需要使用memcache缓存返回值.我正在研究一个Python项目,该项目使用装饰器来注释应该缓存返回值的函数.我在Scala中寻找一种类似的方法来为函数添加缓存方面.
可以说我有这个功能,def callingService(arg1: String, arg2: Int): String我想
任何调用callingService的代码都不应该知道缓存.callingService的实现应该只调用服务X并返回一个String值而不处理缓存内容.
在C * 1.2.x集群中,我们有7个键空间,每个键空间包含一个使用宽行的列族。cf使用LCS。我定期在行中进行删除。最初,每一行每天最多可以包含1个条目。超过3个月的条目将被删除,并且每周最多保留1条条目。我已经运行了几个月,但是并没有真正回收磁盘空间。我需要调查原因。对我来说,墓碑似乎还没有被清除。每个键空间都有大约1300个sstable文件(* -Data.db),每个文件的大小约为130 Mb(sstable_size_in_mb为128)。每个CF中的GC宽限秒为864000。未指定tombstone_threshold,因此应默认为0.2。我应该怎么看才能找出为什么不回收磁盘空间?
我试图在Scala 2.11.8中提取url的主机名.由于某种原因,模式匹配方法不起作用,我无法弄清楚为什么:(
val HOSTNAME = "^http[s]:\\/?\\/?([^:\\/\\s]+)".r
val text = "https://foo-bar.hostname.com/"
// evaluates to None
val host: Option[String] = {
text match {
case HOSTNAME(h) => Some(h)
case _ =>
None
}
}
// evaluates to Some(foo-bar.hostname.com)
val host: Option[String] = {
val matcher = HOSTNAME.findAllIn(text)
if (matcher.hasNext && matcher.groupCount > 0) {
Some(matcher.group(1))
} else {
None
}
}
Run Code Online (Sandbox Code Playgroud) scala ×5
java ×3
cassandra ×2
sbt ×2
aop ×1
build ×1
caching ×1
concurrency ×1
gradle ×1
jboss ×1
jvm ×1
kotlin ×1
nio ×1
nonblocking ×1
openjdk-11 ×1
scala-2.10 ×1
sockets ×1
undertow ×1
vert.x ×1