Comments (2)
The Consumer is exported, so you can extend Consumer
and override method(s).
For example:
const Consumer = require('sqs-consumer');
class MySubclass extends Consumer {
constructor(options) {
super(options)
}
_processMessage(message, cb) {
console.log('execute custom logic....');
super._processMessage(message, cb); // delegate to parent
}
}
const consumer = new MySubclass(opts);
consumer.start();
However, in this case, overriding the _processMessage
method is not recommended (or supported for this usage) as it's intended as a private method. This is indicated by the '_' prefix.
from sqs-consumer.
Thanks @nspragg, this is a very nice solution. What I did is ugly, I can't find a better way, it's embarrassing. Although it's working. Can you also suggest a better way to run multiple consumers. As you can see, I stored all the instances of consumer in an array, then run everything at the bottom.
var app = [];
Consumer.prototype.setExtraProperties = function(extraProperties) {
this.extraProperties = extraProperties;
}
var Consumer1 = new Consumer({
queueUrl: `https://sqs.ap-southeast-1.amazonaws.com/QNAME1`,
handleMessage: handleMessage,
sqs: new AWS.SQS(),
batchSize: 10,
});
Consumer1.setExtraProperties({version:1});
Consumer1._processMessageBound = _processMessage.bind(Consumer1);
app.push(Consumer1);
var Consumer2 = new Consumer({
queueUrl: `https://sqs.ap-southeast-1.amazonaws.com/QNAME2`,
handleMessage: handleMessage,
sqs: new AWS.SQS(),
batchSize: 10,
});
Consumer2.setExtraProperties({version:2});
Consumer2._processMessageBound = _processMessage.bind(Consumer2);
app.push(Consumer2);
if (app.length > 0) {
let consumer;
for (let i in app) {
consumer = app[i];
consumer.on('error', err => {
console.error(`error on app: ${err.message}`);
console.log('The app will restart due to error');
setTimeout( () => {
process.exit(1);
}, 3000);
});
consumer.on('processing_error', err => {
console.error(`processing_error on app: ${err.message}`);
console.log('The app will restart due to processing_error');
setTimeout( () => {
process.exit(1);
}, 3000);
});
consumer.start();
}
}
function _processMessage (message, cb) {
var consumer = this;
this.emit('message_received', message);
async.series([
function handleMessage(done) {
consumer.handleMessage(message, done, consumer.extraProperties);
},
function deleteMessage(done) {
consumer._deleteMessage(message, done);
}
], function (err) {
if (err) {
if (err.name === SQSError.name) {
consumer.emit('error', err, message);
} else {
consumer.emit('processing_error', err, message);
}
} else {
consumer.emit('message_processed', message);
}
cb();
});
}
from sqs-consumer.
Related Issues (20)
- [Bug]: Using @aws-sdk/client-sqs": "3.53.0" throws error HOT 5
- Test Issue: Please ignore :) HOT 1
- Test Issue 2: Please ignore :) HOT 1
- test issue, please ignore HOT 1
- Drop support for node 14 HOT 1
- [Bug]: The security token included in the request is invalid
- Allow the option `visibilityTimeout` to be configured after initialisation HOT 1
- [Bug]: The options parameter is not optional in the code HOT 1
- Configure consumer to use a SQS client that gets credentials using sts.assumeRole and post refresh
- [Bug]: heartbeatInterval is not working as expected HOT 3
- Message type is not exposed HOT 7
- Fire an event when the Consumer is started HOT 1
- [Bug]: `abort: true` raises errors when AWS SQS is polling for messages HOT 7
- [Bug]: Event listener on .once is called multiple times HOT 4
- Add the ability to programmatically update batchSize and waitTimeSeconds HOT 1
- Log a debug message whenever `.emit` is called HOT 1
- Trigger a debug message periodically while the consumer is processing messages HOT 1
- Remove debug module in favour of node in-builts HOT 1
- [Bug]: TypeError: Cannot set property message of [object Object] which has only a getter HOT 7
- handleMessage does not allow for an injected process method HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sqs-consumer.