etcd4s alternatives and similar packages
Based on the "Database" category.
Alternatively, view etcd4s alternatives based on common mentions on social networks and blogs.
-
Slick
Slick (Scala Language Integrated Connection Kit) is a modern database query and access library for Scala -
ScalikeJDBC
A tidy SQL-based DB access library for Scala developers. This library naturally wraps JDBC APIs and provides you easy-to-use APIs. -
scala-redis
A scala library for connecting to a redis server, or a cluster of redis nodes using consistent hashing on the client side. -
scredis
Non-blocking, ultra-fast Scala Redis client built on top of Akka IO, used in production at Livestream -
Scruid
Scala + Druid: Scruid. A library that allows you to compose queries in Scala, and parse the result back into typesafe classes. -
lucene4s
Light-weight convenience wrapper around Lucene to simplify complex tasks and add Scala sugar. -
GCP Datastore Akka Persistence Plugin
akka-persistence-gcp-datastore is a journal and snapshot store plugin for akka-persistence using google cloud firestore in datastore mode.
WorkOS - The modern identity platform for B2B SaaS
Do you think we are missing an alternative of etcd4s or a related project?
Popular Comparisons
README
etcd4s
A Scala etcd client implementing V3 API using gRPC and ScalaPB with optional Akka Stream support. This project is in beta stage with basic test coverage and usable APIs.
Overview
This repo is a client library of etcd implementing V3 APIs using gRPC under the hood with optional Akka Stream support for stream APIs. This library implement the complete set of the APIs in the V3 protoal. More information about the APIs can be found here:
Note that this library do not support gRPC json gateway and use raw gRPC call instead (underlying is java-grpc). This project cross build against Scala 2.11, 2.12 and 2.13 and also tested against etcd 3.2.x, 3.3.x but fail under 3.4.x.
Getting Started
The core lib
libraryDependencies += "com.github.mingchuno" %% "etcd4s-core" % "0.3.0"
To include akka stream support for stream API
libraryDependencies += "com.github.mingchuno" %% "etcd4s-akka-stream" % "0.3.0"
Usage
import org.etcd4s.{Etcd4sClientConfig, Etcd4sClient}
import org.etcd4s.implicits._
import org.etcd4s.formats._
import org.etcd4s.pb.etcdserverpb._
import scala.concurrent.ExecutionContext.Implicits.global
// create the client
val config = Etcd4sClientConfig(
address = "127.0.0.1",
port = 2379
)
val client = Etcd4sClient.newClient(config)
// set a key
client.setKey("foo", "bar") // return a Future
// get a key
client.getKey("foo").foreach { result =>
assert(result == Some("bar"))
}
// delete a key
client.deleteKey("foo").foreach { result =>
assert(result == 1)
}
// set more key
client.setKey("foo/bar", "Hello")
client.setKey("foo/baz", "World")
// get keys with range
client.getRange("foo/").foreach { result =>
assert(result.count == 2)
}
// remember to shutdown the client
client.shutdown()
The above is wrapper for simplified APIs. If you want to access all underlying APIs with full options. You can use the corresponding api instance to have more control.
client.kvApi.range(...)
client.kvApi.put(...)
client.leaseApi.leaseGrant(...)
client.electionApi.leader(...)
If you want the Akka Stream support for the stream APIs, you should add the etcd4s-akka-stream
depns into your build.sbt
import org.etcd4s.akkasupport._
import org.etcd4s.implicits._
import org.etcd4s.pb.etcdserverpb._
import akka.NotUsed
// assume you have the implicit value and client needed in the scope
val flow: Flow[WatchRequest, WatchResponse, NotUsed] = client.watchApi.watchFlow
val request: WatchRequest = WatchRequest().withCreateRequest(WatchCreateRequest().withKey("foo"))
Source.single(request)
.via(flow)
.runForeach { resp =>
println(resp)
}
More example usage under the test dir in the repo.
Development
Requirment
- Java 8+, Scala 12.12.X+, sbt and docker
# to start a background etcd for development
docker-compose up -d
How to start?
Simple! Just sbt test
Publish
This is to remind me how to publish and may switch to sbt-release
later
- make sure you have
~/.sbt/gpg/
ready with pub/sec key paris - make sure you have
~/.sbt/1.0/sonatype.sbt
ready with credentials sbt "+clean" "+compile"
sbt "+publishSigned"
sbt sonatypeReleaseAll