@vtfk/azure-servicebus-queue
Advanced tools
Comparing version 1.0.5 to 1.0.6
{ | ||
"name": "@vtfk/azure-servicebus-queue", | ||
"version": "1.0.5", | ||
"version": "1.0.6", | ||
"description": "High-level API for Azure Servicebus Queue operations", | ||
@@ -12,3 +12,4 @@ "main": "src/index.js", | ||
"test": "standard && npm audit && ava", | ||
"example": "node examples/example" | ||
"example": "node examples/example", | ||
"example-bigfile": "node examples/example-bigfile" | ||
}, | ||
@@ -23,3 +24,5 @@ "keywords": [ | ||
"dependencies": { | ||
"@azure/service-bus": "1.0.0-preview.2" | ||
"@azure/service-bus": "1.0.0-preview.2", | ||
"@vtfk/azure-storage-blob": "1.0.3", | ||
"uuid": "3.3.2" | ||
}, | ||
@@ -26,0 +29,0 @@ "repository": { |
@@ -27,2 +27,6 @@ # (WIP) azure-servicebus-queue | ||
connectionString: '<Servicebus Connection String>' | ||
/* Uncomment to send and receive messages >64kb | ||
storageConnectionString: '<Blob Service SAS URL>' | ||
storageContainerName: '<Container name>' | ||
*/ | ||
}) | ||
@@ -91,3 +95,3 @@ ``` | ||
const dateToSend = new Date().toISOString() | ||
const message = 'Message' | ||
const message = { body: 'message' } | ||
await topic.scheduleMessage(dateToSend, message) | ||
@@ -100,3 +104,3 @@ ``` | ||
const dateToSend = new Date().toISOString() | ||
const messages = [{ message: '1' }, { message: '2' }] | ||
const messages = [{ body: '1' }, { body: '2' }] | ||
await topic.scheduleMessages(dateToSend, messages) | ||
@@ -103,0 +107,0 @@ ``` |
const { ServiceBusClient, ReceiveMode } = require('@azure/service-bus') | ||
const storage = require('@vtfk/azure-storage-blob') | ||
const uuid = require('uuid/v4') | ||
function messageSizeOverLimit (s) { | ||
return ~-encodeURI(JSON.stringify(s)).split(/%..|./).length >= 64000 | ||
} | ||
module.exports = options => { | ||
@@ -12,4 +18,9 @@ if (!options) { | ||
const serviceBusClient = ServiceBusClient.createFromConnectionString(options.connectionString) | ||
let client | ||
let client, storageClient | ||
if (options.storageConnectionString && options.storageContainerName) { | ||
const storageConnection = storage({ connectionString: options.storageConnectionString }) | ||
storageClient = storageConnection.container(options.storageContainerName) | ||
} | ||
async function closeServiceBusClient () { | ||
@@ -32,5 +43,18 @@ if (client) await client.close() | ||
function send (message) { | ||
async function send (message) { | ||
const sender = client.createSender() | ||
return sender.send(message) | ||
if (messageSizeOverLimit(message)) { | ||
if (!storageClient) { | ||
throw Error('You need to initialize storage blob connection to send messages >64 kb') | ||
} | ||
const fileId = uuid() + '.json' | ||
try { | ||
await storageClient.writeText(fileId, JSON.stringify(message)) | ||
return sender.send({ body: { fileId } }) | ||
} catch (error) { | ||
throw error | ||
} | ||
} else { | ||
return sender.send(message) | ||
} | ||
} | ||
@@ -53,2 +77,9 @@ | ||
function readBigMessage (fileId) { | ||
if (!storageClient) { | ||
throw Error('You need to initialize storage blob connection to receive messages >64 kb') | ||
} | ||
return storageClient.read(fileId) | ||
} | ||
async function receive (limit = 1, timeoutInSeconds = 5) { | ||
@@ -60,3 +91,8 @@ const receiver = client.createReceiver(ReceiveMode.peekLock) | ||
if (!message.length) return messages | ||
messages.push(message[0].body) | ||
if (message[0].body && message[0].body.fileId) { | ||
const content = await readBigMessage(message[0].body.fileId) | ||
messages.push(content) | ||
} else { | ||
messages.push(message[0].body) | ||
} | ||
await message[0].complete() | ||
@@ -68,2 +104,14 @@ } | ||
close: () => closeServiceBusClient(), | ||
subscription: (topicName, subscriptionName) => { | ||
if (!topicName) { | ||
throw Error('Missing required input: topicName') | ||
} | ||
if (!subscriptionName) { | ||
throw Error('Missing required input: subscriptionName') | ||
} | ||
client = serviceBusClient.createSubscriptionClient(topicName, subscriptionName) | ||
return { | ||
// TODO: Subscription Client operations | ||
} | ||
}, | ||
topic: topicName => { | ||
@@ -70,0 +118,0 @@ if (!topicName) { |
10728
130
186
3
+ Addeduuid@3.3.2
+ Added@azure/ms-rest-js@1.2.3(transitive)
+ Added@azure/storage-blob@10.3.0(transitive)
+ Added@vtfk/azure-storage-blob@1.0.3(transitive)
+ Addedaxios@0.18.1(transitive)
+ Addedevents@3.0.0(transitive)
+ Addedfollow-redirects@1.5.10(transitive)
+ Addeduuid@3.3.2(transitive)
- Removeduuid@3.4.0(transitive)