@teamteanpm2024/soluta-autem-perspiciatis v0.0.1-security.19
@teamteanpm2024/soluta-autem-perspiciatis
Apollo graphql subscriptions over Kafka, using kafkajs. Inspired on graphql-kafka-subscriptions.
Communication is done through 1 kafka topic specified in the KafkaPubSub
create
function. Then
channels are used to identify the right subscription.
Installation
npm install @teamteanpm2024/soluta-autem-perspiciatis
yarn add @teamteanpm2024/soluta-autem-perspiciatis
Usage
Kafka Pub Sub
import { Kafka } from 'kafkajs';
import { KafkaPubSub } from '@teamteanpm2024/soluta-autem-perspiciatis'
export const pubsub = KafkaPubSub.create({
topic: 'my-topic',
kafka: new Kafka({/* ... */})
groupIdPrefix: "my-group-id-prefix", // used for kafka pub/sub,
producerConfig: {}, // optional kafkajs producer configuration
consumerConfig: {} // optional kafkajs consumer configuration
})
Subscription Resolver
{
collaboration: {
resolve: (payload: KafkaMessage) => {
// payload.value will be whatever you sent
return payload.value;
},
subscribe: (_, args) => {
return pubsub.asyncIterator<YourType>("my channel");
}
}
};
You can also use the subscription payload for the channel.
{
collaboration: {
resolve: (payload: KafkaMessage) => {
// what you publish will end up passing through here and to the client
return payload.value;
},
subscribe: (_, args) => {
// this is called from the client
return pubsub.asyncIterator<YourType>(`channel-${args.myId}`);
}
}
};
Publication
Somewhere in your code, you call this:
pubsub.publish("my channel", {
/* your event data */
});
Use the rest of the kafkajs options:
const event = {/* ... */};
const headers = {
header1: "value"
};
const producerOptions = { /* options from kafka.js.org/docs/producing: acks, timeout, etc */ };
pubsub.publish("my channel", event, headers, producerOptions);
This ends up publishing the event to kafka (to the topic you used to create the kafkaPubSub
)
and received by all consumers. The consumer which is listening to my channel
will send it
to the client.
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
6 months ago
6 months ago
6 months ago
5 months ago
5 months ago
5 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago