Pub/Sub with Javascript #
For this example we will use Node.js. You will need to install Node.js and NPM.
Let's create a new project folder called realtimePubSub
:
mkdir realtimePubSub
For this code example we need Kuzzle's Javascript SDK. To install it, run:
npm install kuzzle-sdk
We can create an index.js
file in the realtimePubSub
folder to program our test.
touch index.js
Connect to Kuzzle #
The first thing we need to do is connect to Kuzzle. To do this write the following code:
const {
Kuzzle,
WebSocket
} = require('kuzzle-sdk');
const kuzzle = new Kuzzle(new WebSocket('kuzzle'));
Replace kuzzle
with the IP address or with the name of the Kuzzle server.
Subscribe to Documents with Specific Criteria #
Let's use the subscribe method.
We will perform a subscription request that tells Kuzzle that the App wants to be notified anytime a document is created that contains the message field. We define this subscription filter as follows, for more information about filters click here:
// Create a filter that defines that the 'message' field exists
const filter = {exists: {field: 'message'}};
// Triggered whenever a document matching the filter is submitted to Kuzzle
const callback = notification => {
console.log(notification.result._source.message);
};
try {
await kuzzle.realtime.subscribe(
'myindex',
'mycollection',
filter,
callback
);
console.log('subscribe ok');
} catch (error) {
console.error(error.message);
}
We have now programmed the subscription side of the test.
Publish a Document #
Now let's move on to the publish side of the test. Here we will publish a document that contains the message
field. When Kuzzle receives this message, it will detect that there is a subscriber listening for such messages and will send it to these subscribers, in this case to our Android App.
We will use the publish method that creates a document containing the value hello world
in the message
field.
try {
await kuzzle.realtime.publish(
'myindex',
'mycollection',
{message: 'hello world'}
);
console.log('message published');
} catch (error) {
console.error(error.message);
}
Run the Test #
The full code should look something like this:
const {
Kuzzle,
WebSocket
} = require('kuzzle-sdk');
const kuzzle = new Kuzzle(new WebSocket('kuzzle'));
// Create a filter that defines that the 'message' field exists
const filter = {exists: {field: 'message'}};
// Triggered whenever a document matching the filter is submitted to Kuzzle
const callback = notification => {
console.log(notification.result._source.message);
};
const run = async () => {
try {
await kuzzle.connect();
/* Create a subscription that triggers a notification
whenever a user publishes a document with the field 'message' */
await kuzzle.realtime.subscribe(
'myindex',
'mycollection',
filter,
callback
);
await kuzzle.realtime.publish(
'myindex',
'mycollection',
{message: 'hello world'}
);
} catch (error) {
console.error(error);
} finally {
kuzzle.disconnect();
}
};
run();
Your console should show the following message:
hello world