docs

a slatepencil documentail site

View on GitHub

RABBITMQ

docker-compose

version: "3.6"
services:
  rabbitmq:
    image: "rabbitmq:3.8-management"
    container_name: rabbitmq
    restart: always
    environment:
      - RABBITMQ_DEFAULT_USER=${RABBIT_MQ_USER}
      - RABBITMQ_DEFAULT_PASS=${RABBIT_MQ_PASSWORD}
    ports:
      - 15672:15672
      - 5672:5672
      - 1883:1883
    volumes:
      - /mnt/ssd/rabbitmq:/var/lib/rabbitmq
      - /mnt/ssd/rabbitmq/enabled_plugins:/etc/rabbitmq/enabled_plugins

file [enabled_plugsin]

[rabbitmq_management,rabbitmq_prometheus,rabbitmq_mqtt].

plugins

$ rabbitmq-plugins list
Listing plugins with pattern ".*" ...
 Configured: E = explicitly enabled; e = implicitly enabled
 | Status: * = running on rabbit@abc971aca36f
 |/
[  ] rabbitmq_amqp1_0                  3.8.18
[  ] rabbitmq_auth_backend_cache       3.8.18
[  ] rabbitmq_auth_backend_http        3.8.18
[  ] rabbitmq_auth_backend_ldap        3.8.18
[  ] rabbitmq_auth_backend_oauth2      3.8.18
[  ] rabbitmq_auth_mechanism_ssl       3.8.18
[  ] rabbitmq_consistent_hash_exchange 3.8.18
[  ] rabbitmq_event_exchange           3.8.18
[  ] rabbitmq_federation               3.8.18
[  ] rabbitmq_federation_management    3.8.18
[  ] rabbitmq_jms_topic_exchange       3.8.18
[E*] rabbitmq_management               3.8.18
[e*] rabbitmq_management_agent         3.8.18
[E*] rabbitmq_mqtt                     3.8.18
[  ] rabbitmq_peer_discovery_aws       3.8.18
[  ] rabbitmq_peer_discovery_common    3.8.18
[  ] rabbitmq_peer_discovery_consul    3.8.18
[  ] rabbitmq_peer_discovery_etcd      3.8.18
[  ] rabbitmq_peer_discovery_k8s       3.8.18
[E*] rabbitmq_prometheus               3.8.18
[  ] rabbitmq_random_exchange          3.8.18
[  ] rabbitmq_recent_history_exchange  3.8.18
[  ] rabbitmq_sharding                 3.8.18
[  ] rabbitmq_shovel                   3.8.18
[  ] rabbitmq_shovel_management        3.8.18
[  ] rabbitmq_stomp                    3.8.18
[  ] rabbitmq_top                      3.8.18
[  ] rabbitmq_tracing                  3.8.18
[  ] rabbitmq_trust_store              3.8.18
[e*] rabbitmq_web_dispatch             3.8.18
[  ] rabbitmq_web_mqtt                 3.8.18
[  ] rabbitmq_web_mqtt_examples        3.8.18
[  ] rabbitmq_web_stomp                3.8.18
[  ] rabbitmq_web_stomp_examples       3.8.18

$ rabbitmq-plugins enable rabbitmq_mqtt

Callback API example

var q = "tasks";

function bail(err) {
  console.error(err);
  process.exit(1);
}

// Publisher
function publisher(conn) {
  conn.createChannel(on_open);
  function on_open(err, ch) {
    if (err != null) bail(err);
    ch.assertQueue(q);
    ch.sendToQueue(q, Buffer.from("something to do"));
  }
}

// Consumer
function consumer(conn) {
  var ok = conn.createChannel(on_open);
  function on_open(err, ch) {
    if (err != null) bail(err);
    ch.assertQueue(q);
    ch.consume(q, function (msg) {
      if (msg !== null) {
        console.log(msg.content.toString());
        ch.ack(msg);
      }
    });
  }
}

require("amqplib/callback_api").connect(
  "amqp://localhost",
  function (err, conn) {
    if (err != null) bail(err);
    consumer(conn);
    publisher(conn);
  }
);

Promise API example

var q = "tasks";

var open = require("amqplib").connect("amqp://localhost");

// Publisher
open
  .then(function (conn) {
    return conn.createChannel();
  })
  .then(function (ch) {
    return ch.assertQueue(q).then(function (ok) {
      return ch.sendToQueue(q, Buffer.from("something to do"));
    });
  })
  .catch(console.warn);

// Consumer
open
  .then(function (conn) {
    return conn.createChannel();
  })
  .then(function (ch) {
    return ch.assertQueue(q).then(function (ok) {
      return ch.consume(q, function (msg) {
        if (msg !== null) {
          console.log(msg.content.toString());
          ch.ack(msg);
        }
      });
    });
  })
  .catch(console.warn);