> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# amqplib

export const VersionRequirements = ({versions = []}) => {
  if (!Array.isArray(versions) || versions.length === 0) {
    return null;
  }
  const boundaries = {
    upper: " or lower",
    exact: "",
    lower: " or higher"
  };
  const containerStyle = {
    marginTop: "0.5rem",
    marginBottom: "1.5rem"
  };
  const lineStyle = {
    display: "block",
    margin: "0 0 0.35rem 0",
    fontSize: "0.875rem",
    lineHeight: "1.4"
  };
  const pillBaseStyle = {
    display: "inline-block",
    padding: "0.1em 0.4em",
    borderRadius: "0.25rem",
    border: "1px solid",
    fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
    fontSize: "0.85em",
    fontWeight: 500
  };
  const pillColors = {
    "AppSignal for Elixir": {
      background: "#f3e8ff",
      borderColor: "#e9d5ff",
      color: "#9333ea"
    },
    "AppSignal for Front-end": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Go": {
      background: "#ccfbf1",
      borderColor: "#99f6e4",
      color: "#0d9488"
    },
    "AppSignal for JavaScript": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Node.js": {
      background: "#dcfce7",
      borderColor: "#bbf7d0",
      color: "#16a34a"
    },
    "AppSignal for Python": {
      background: "#dbeafe",
      borderColor: "#bfdbfe",
      color: "#2563eb"
    },
    "AppSignal for Ruby": {
      background: "#fee2e2",
      borderColor: "#fecaca",
      color: "#dc2626"
    },
    "AppSignal for Rust": {
      background: "#ffedd5",
      borderColor: "#fed7aa",
      color: "#ea580c"
    }
  };
  const defaultPillColor = {
    background: "#f4f4f5",
    borderColor: "#e4e4e7",
    color: "#52525b"
  };
  const getPillStyle = name => ({
    ...pillBaseStyle,
    ...pillColors[name] || defaultPillColor
  });
  const getBoundText = bound => {
    return boundaries[bound] || boundaries.lower;
  };
  return <div style={containerStyle}>
      {versions.map((v, i) => <p key={`${v.name}-${v.version}-${v.bound || "lower"}-${i}`} style={lineStyle}>
          This feature requires{" "}
          <code style={getPillStyle(v.name)}>{v.name}</code> version {v.version}
          {getBoundText(v.bound)}.
        </p>)}
    </div>;
};

<VersionRequirements
  versions={[
{ name: "Appsignal for Node.js", version: "3.4.2" }
]}
/>

Advanced Message Queuing Protocol (AMQP) est un protocole standard ouvert qui facilite l'interopérabilité de la messagerie entre les systèmes, quel que soit le fournisseur du broker de messages ou la plateforme utilisée, par exemple entre les brokers STOMP et MQTT.

L'intégration AppSignal pour Node.js pour [amqplib](https://www.npmjs.com/package/amqplib) et les packages compatibles tels que [Rascal](https://www.npmjs.com/package/rascal) vous permet d'instrumenter l'envoi et la réception de messages dans votre application.

## Installation

Le package amqplib est instrumenté automatiquement par le package AppSignal pour Node.js.

## Fonctionnalités

Lorsque vous utilisez l'intégration amqplib, AppSignal créera un span enfant pour chaque message envoyé ou reçu.

Notez que si les messages sont reçus/envoyés en dehors d'un contexte instrumenté, tel qu'une requête web ou un job en arrière-plan, il est nécessaire de créer manuellement un span pour encapsuler le traitement du message.

Voici un exemple pour Rascal utilisant l'exemple le plus simple trouvé dans leur dépôt, avec une instrumentation manuelle ajoutée pour encapsuler le traitement du message dans un span.

<CodeGroup>
  ```javascript Node.js theme={null}
  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);
  });
  ```
</CodeGroup>

Pour plus d'informations sur l'instrumentation manuelle, consultez le [guide d'instrumentation personnalisée](/nodejs/3.x/instrumentation/instrumentation).
