Zum Hauptinhalt springen
Advanced Message Queuing Protocol (AMQP) ist ein offenes Standardprotokoll, das die Messaging-Interoperabilität zwischen Systemen erleichtert, unabhängig vom Message-Broker-Anbieter oder der Plattform, die sie verwenden, z. B. zwischen STOMP- und MQTT-Brokern. Die AppSignal für Node.js-Integration für amqplib und kompatible Pakete wie Rascal ermöglicht es Ihnen, das Senden und Empfangen von Nachrichten in Ihrer Anwendung zu instrumentieren.

Installation

Das amqplib-Paket wird vom AppSignal für Node.js-Paket automatisch instrumentiert.

Funktionen

Wenn Sie die amqplib-Integration verwenden, erstellt AppSignal einen Child-Span für jede gesendete oder empfangene Nachricht. Beachten Sie, dass wenn die Nachrichten außerhalb eines instrumentierten Kontextes empfangen/gesendet werden, wie z. B. einer Webanfrage oder eines Background-Jobs, manuell ein Span erstellt werden muss, um die Nachrichtenverarbeitung zu umschließen. Unten finden Sie ein Beispiel für Rascal mit dem einfachsten Beispiel aus deren Repository, mit manueller Instrumentierung, die hinzugefügt wurde, um die Nachrichtenverarbeitung in einem Span zu umschließen.
let Rascal = require("../..");
let config = require("./config");
const trace = require("@opentelemetry/api");
const tracer = trace.getTracer("example-tracer");

Rascal.Broker.create(Rascal.withDefaultConfig(config), function (err, broker) {
  if (err) throw err;

  broker.subscribe("demo_sub", function (err, subscription) {
    if (err) throw err;
    subscription.on("message", function (message, content, ackOrNack) {
      tracer.startActiveSpan("received message demo_sub", (span) => {
        // Process the message
        ackOrNack();
        span.end();
      });
    });
  });
  broker.on("error", console.error);

  setInterval(function () {
    broker.publish(
      "demo_pub",
      new Date().toISOString() + ": hello world",
      function (err, publication) {
        tracer.startActiveSpan("sent message demo_pub", (span) => {
          if (err) throw err;
          span.end();
        });
      }
    );
  }, 1000);
});
Weitere Informationen zur manuellen Instrumentierung finden Sie im Leitfaden zur benutzerdefinierten Instrumentierung.