Skip to content

romanchechyotkin/nats.ocaml

Repository files navigation

NATS - OCaml Client

OCaml client for the NATS messaging system.

License Apache 2

Warning

In active development! You can view the progress here.

Basics

  • CONNECT
  • INFO
  • PUB
  • HPUB
  • HMSG
  • SUB/UNSUB
  • MSG
  • PING/PONG
  • OK/ERR

Features

  • Drain mechanism
  • Request mechanism

Packages

The project provides several packages with different implementations for any contexts.

Package Description Require OCaml
nats-client implementation independent protocol abstracts >= 4.14 (LTS)
nats-client-lwt lwt.unix-based client implementation

Quick start

Installation

Currently only a development version is available. You can pin it using the OPAM package manager.

$ opam pin nats-client-lwt.dev https://github.com/romanchechyotkin/nats.ocaml.git

Publish-Subscribe example

This example shows how to publish to a subject and handle its messages.

open Lwt.Infix

let main =
  (* Create a switch for automatic dispose resources. *)
  Lwt_switch.with_switch @@ fun switch ->
  
  (* Connect to a NATS server by address 127.0.0.1:4222 with ECHO flag. *)
  let%lwt client =
    Nats_client_lwt.connect ~switch ~settings:[ `Echo ]
      (Uri.of_string "nats://127.0.0.1:4222")
  in

  (* Publish 'hello' message to greet.joe subject. *)
  Nats_client_lwt.pub client ~subject:"greet.joe" "hello";%lwt

  (* Subscribe to greet.* subject. *)
  let%lwt subscription =
    Nats_client_lwt.sub ~switch client ~subject:"greet.*" ()
  in

  (* Publishes 'hello' message to three subjects. *)
  Lwt_list.iter_s
    (fun subject -> Nats_client_lwt.pub client ~subject "hello")
    [ "greet.sue"; "greet.bob"; "greet.pam" ];%lwt

  (* Handle first three incoming messages to the greet.* subject. *)
  Lwt_stream.nget 3 subscription.messages
  >>= Lwt_list.iter_s (fun (message : Nats_client.Protocol.msg) ->
          Lwt_io.printlf "'%s' received on %s" message.payload.contents
            message.subject)

let () = Lwt_main.run main

Take it from examples/natsbyexample/publish_subscribe.ml.

$ docker start -a nats-server
$ dune exec ./examples/natsbyexample/publish_subscribe.exe
'hello' received on greet.sue       
'hello' received on greet.bob
'hello' received on greet.pam

By Examples

See more examples at examples/ directory.

Messaging

References

Contributing

The is an open source project under the Apache 2.0 license. Contributions are very welcome! Let's build a great ecosystem together! Please be sure to read the CONTRIBUTING.md before your first commit.

About

OCaml client for NATS, the cloud native messaging system.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published