Skip to content

A graphql subscriptions implementation using amqp and apollo's graphql-subscriptions

License

Notifications You must be signed in to change notification settings

Surnet/graphql-amqp-subscriptions

Folders and files

NameName
Last commit message
Last commit date
Mar 7, 2025
Mar 7, 2025
Nov 19, 2024
Feb 18, 2019
Jan 23, 2024
Nov 19, 2024
Feb 18, 2019
Jan 23, 2024
Feb 18, 2019
Jan 23, 2024
Feb 18, 2019
Nov 19, 2024
Jan 23, 2024
Mar 7, 2025
Mar 7, 2025
Jan 23, 2024

Repository files navigation

graphql-amqp-subscriptions

This package implements the PubSubEngine Interface from the graphql-subscriptions package. It allows you to connect your subscriptions manager to a AMQP PubSub mechanism.

This package is influenced by graphql-redis-subscriptions and graphql-rabbitmq-subscriptions.

npm Version npm Downloads

graphql-subscriptions@2

If you are using graphql-subscriptions@2.x please use graphql-amqp-subscriptions@2.

Basic usage

import { AMQPPubSub } from 'graphql-amqp-subscriptions';
import amqp from 'amqplib';

amqp.connect('amqp://guest:guest@localhost:5672?heartbeat=30')
.then(conn => {
  const pubsub = new AMQPPubSub({
    connection: conn
    /* exchange: {
       name: 'exchange',
       type: 'topic',
       options: {
         durable: false,
         autoDelete: true
       }
     },
     queue: {
       name: 'queue'
       options: {
         exclusive: true,
         durable: true,
         autoDelete: true
       },
       unbindOnDispose: false;
       deleteOnDispose: false;
     } */
  });
  // Use the pubsub instance from here on
})
.catch(err => {
  console.error(err);
});

Benefits

  • Reusing existing amqplib Connection
  • Reusing channels (one for subscriptions, one for publishing)
  • Performance/Ressource-usage benefits on AMQP (RabbitMQ) because of the aforementioned reasons more info
  • Using Topic Exchange (e.g. you publish to agreements.eu.berlin.headstore and subscribe to agreements.eu.#) more info

Debug

This package uses Debug. To show the logs run your app with the environment variable DEBUG="AMQPPubSub"

Tests

You'll need to have a local AMPQ instance such as RabbitMQ running to run tests.

If you have Docker, you can run:

docker run --hostname my-rabbit -p 5672:5672 rabbitmq:3

Then

npm test