小编rei*_*kje的帖子

如何在AsynchronousSocketChannel上正确同步并发读取和写入

我试图使用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)

java sockets concurrency nio vert.x

5
推荐指数
1
解决办法
1614
查看次数

如何在Undertow HttpHandler中发送异步响应

我正在寻找一个示例,显示如何在异步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)

java jboss scala nonblocking undertow

5
推荐指数
1
解决办法
2133
查看次数

如何在多模块构建中引用来自不同模块的SBT设置

在带有子模块的多模块构建中,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但这不起作用.有什么建议?

sbt

4
推荐指数
1
解决办法
434
查看次数

如果Scala中的类型不相关,如何编写有效的类型有界代码

我想改进以下与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)

虽然这有效,但如何避免以下问题

  1. 添加新的用户定义类型类(如Blob或)时重复Meta
  2. 添加新方法时的模式匹配重复 save
  3. 具有Object参数类型

scala scala-2.10

3
推荐指数
1
解决办法
97
查看次数

Cassandra何时读取修复阻止查询

Cassandra nodetool netstats在其他方面输出以下内容:自服务器重启以来阻止查询的读取修复操作数.

在哪些情况下,读取修复可以阻止(读取?)查询?我认为阅读修理总是在后台运行.

cassandra

3
推荐指数
1
解决办法
1158
查看次数

如何在 SBT 多项目中共享自定义任务

我有一个项目设置为 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)

scala sbt

3
推荐指数
1
解决办法
676
查看次数

如何在 Gradle 中基于 Kotlin DSL 构建的多项目中禁用 distZip

我已经使用 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 buildapplication插件创建我的分布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 …

build gradle kotlin gradle-kotlin-dsl

3
推荐指数
1
解决办法
1179
查看次数

如何限制 Open JDK 11 上的非堆大小

我们正在 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)

java jvm jvm-arguments openjdk-11

3
推荐指数
1
解决办法
8646
查看次数

您将如何在Scala中实现缓存方面

头脑风暴:我正在开发一个Scala项目,我们在那里进行服务调用,需要使用memcache缓存返回值.我正在研究一个Python项目,该项目使用装饰器来注释应该缓存返回值的函数.我在Scala中寻找一种类似的方法来为函数添加缓存方面.

可以说我有这个功能,def callingService(arg1: String, arg2: Int): String我想

  • 根据函数名称和参数计算缓存键
  • 如果缓存不包含密钥则执行服务调用
  • 序列化返回值并将其存储在缓存中
  • 否则反序列化缓存的值并返回它

任何调用callingService的代码都不应该知道缓存.callingService的实现应该只调用服务X并返回一个String值而不处理缓存内容.

aop caching scala python-decorators

2
推荐指数
1
解决办法
899
查看次数

在Cassandra中使用LCS时会延迟清除墓碑的原因

在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。我应该怎么看才能找出为什么不回收磁盘空间?

cassandra

2
推荐指数
1
解决办法
1334
查看次数

为什么Regex模式匹配有时在Scala中不起作用

我试图在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

1
推荐指数
1
解决办法
158
查看次数