GraphQL Subscriptions

Real-time data with subscriptions

Define Subscription

type Subscription {
    messageAdded(channelId: ID!): Message!
    userUpdated(id: ID!): User!
} # subscription type in schema

Subscribe

subscription {
    messageAdded(channelId: "1") {
        id
        content
        author {
            name
        }
    }
} # subscribe to events

Subscription Resolver

const resolvers = {
    Subscription: {
        messageAdded: {
            subscribe: () => pubsub.asyncIterator(['MESSAGE_ADDED'])
        }
    }
}; # resolver with pubsub

Publish Event

const resolvers = {
    Mutation: {
        addMessage: (parent, args) => {
            const message = createMessage(args);
            pubsub.publish('MESSAGE_ADDED', {
                messageAdded: message
            });
            return message;
        }
    }
}; # publish to subscribers