GraphQL
GraphQL is an open-source data query and manipulation language for APIs, and a runtime for fulfilling queries with existing data. GraphQL was developed internally by Facebook in 2012 before being publicly released in 2015. On 7 November 2018, the GraphQL project was moved from Facebook to the newly established GraphQL Foundation, hosted by the non-profit Linux Foundation.
How to Produce a message (Serialization)
Memphis abstracts the need for external serialization functions and embeds them within the SDK.
Example schema:
type Query {
greeting:String
students:[Student]
}
type Student {
id:ID!
firstName:String
lastName:String
}
Code (Uint8Arrays):
const memphis = require("memphis-dev");
(async function () {
try {
await memphis.connect({
host: "MEMPHIS_BROKER_URL",
username: "APPLICATION_USER",
connectionToken: "CONNECTION_TOKEN",
// accountId: ACCOUNT_ID //*optional* In case you are using Memphis.dev cloud
});
const producer = await memphis.producer({
stationName: "STATION_NAME",
producerName: "PRODUCER_NAME"
});
const graphqlMsg = 'query myQuery {greeting} mutation msg { updateUserEmail( email:"http://github.com" id:1){id name}}'
try {
await producer.produce({
message: Buffer.from(graphqlMsg)
});
} catch (ex) {
console.log(ex.message)
}
} catch (ex) {
console.log(ex);
memphis.close();
}
})();
Code (string):
const memphis = require("memphis-dev");
(async function () {
try {
await memphis.connect({
host: "MEMPHIS_BROKER_URL",
username: "APPLICATION_USER",
password: "PASSWORD",
// accountId: ACCOUNT_ID //*optional* In case you are using Memphis.dev cloud
});
const producer = await memphis.producer({
stationName: "STATION_NAME",
producerName: "PRODUCER_NAME"
});
const graphqlMsg = 'query myQuery {greeting} mutation msg { updateUserEmail( email:"http://github.com" id:1){id name}}'
try {
await producer.produce({
message: graphqlMsg
});
} catch (ex) {
console.log(ex.message)
}
} catch (ex) {
console.log(ex);
memphis.close();
}
})();
Code (DocumentNode):
import {parse} from 'graphql'
const memphis = require("memphis-dev");
(async function () {
try {
await memphis.connect({
host: "MEMPHIS_BROKER_URL",
username: "APPLICATION_USER",
password: "PASSWORD",
// accountId: ACCOUNT_ID //*optional* In case you are using Memphis.dev cloud
});
const producer = await memphis.producer({
stationName: "STATION_NAME",
producerName: "PRODUCER_NAME"
});
const graphqlMsg = 'query myQuery {greeting} mutation msg { updateUserEmail( email:"http://github.com" id:1){id name}}'
const doc = parse(graphqlMsg)
try {
await producer.produce({
message: doc
});
} catch (ex) {
console.log(ex.message)
}
} catch (ex) {
console.log(ex);
memphis.close();
}
})();
Consume a message (Deserialization)
In coming versions, Memphis will abstract the need for external deserialization functions and embeds them within the SDK.
An example of received schema:
type Query {
greeting:String
students:[Student]
}
type Student {
id:ID!
firstName:String
lastName:String
}
Code:
const memphis = require('memphis-dev');
const graphql = require('graphql');
(async function () {
let memphisConnection;
try {
memphisConnection = await memphis.connect({
host: 'MEMPHIS_HOSTNAME',
username: 'MEMPHIS_USERNAME',
password: "PASSWORD",
// accountId: ACCOUNT_ID //*optional* In case you are using Memphis.dev cloud
});
const consumer = await memphisConnection.consumer({
stationName: 'MEMPHIS_STATION',
consumerName: 'MEMPHIS_CONSUMER',
consumerGroup: 'MEMPHIS_CG',
});
consumer.on('message', (message) => {
console.log(message.getData().toString());
const doc = graphql.parse(message.getData().toString())
console.log("doc graphql", doc)
message.ack();
const headers = message.getHeaders()
});
consumer.on('error', (error) => {console.log(error)});
} catch (ex) {
console.log(ex);
if (memphisConnection) memphisConnection.close();
}
})();
Last updated
Was this helpful?