Comments (2)
I tested your code by transferring a PNG file and found that the consumer output corrupted data. The problem is the consumer is reading chunks and appending the data to a string and the string operation is performing some kind of character decoding.
The solution is to store the chunk data in a Buffer object.
let body = Buffer.from([]);
let read = function () {
let chunk;
while (null !== (chunk = message.read())) {
body = Buffer.concat([body, chunk], body.length + chunk.length);
}
};
Or you could avoid the hassle of writing your own read logic and pipe the message into file stream.
message.pipe(file);
from stompit.
Many thanks!
Indeed, consuming the file into a string corrupted the data.
My solution was to mark in the message header if this is a file, and in this case, consume it using file stream:
`subscribe(queueName, callback) {
stompit.connect(this.connectParams, function (error, client) {
if (error) {
console.log('Unable to connect: ' + error.message);
callback(error, null);
}
let subscribeParams = {
'destination': '/queue/' + queueName,
'ack': 'client-individual'
};
client.subscribe(subscribeParams, function (error, message) {
let correlationId = message['headers']['correlation-id'];
let type = message['headers']['type'];
let hash = message['headers']['hash'];
let ws, body, filePath;
if (type === "file") {
let id = uuidv1();
filePath = config.downloadPath + "/" + id;
ws = fs.createWriteStream(filePath);
}
else {
body = "";
}
let read = function () {
let chunk;
while (null !== (chunk = message.read())) {
if (type === "file") {
ws.write(chunk);
}
else {
body += chunk;
}
}
};
message.on('readable', read);
message.on('end', function () {
let obj = {'message': body, 'id': correlationId, 'type': type};
client.ack(message);
if (type !== "file") {
callback(null, obj);
}
else {
ws.end();
ws.on('finish', function () {
let obj = {'message': filePath, 'id': correlationId, 'type': type, 'hash': hash};
callback(null, obj);
})
}
});
});
});
}`
from stompit.
Related Issues (20)
- Error: Unexpected ACK received for message-id [ID:b-23774631- HOT 3
- Error: Unexpected ACK received for message-id. How to resolve? HOT 2
- Bulk processing HOT 2
- Cannot send any message when applying the heavy load in sequential in for loop
- Connection refused 127.0.0.1:61613 HOT 3
- How to remove activemq queues and scheduled jobs?
- How to get scheduled id from client when scheduling message to activemq?
- How to set type in message headers
- Unable to use priority in activeMq using stompit in nodejs HOT 1
- Use of Heartbeat in activeMQ HOT 1
- Message gets redelivered in loop during the time of high CPU processing on the client side HOT 3
- Is there a way to programmatically delete an ActiveMQ Job Schedule? HOT 1
- Disconnect hangs after unsubscribe HOT 1
- The connection is closing when thousands of messages are ready to subscribe in queue HOT 1
- Max size of message
- Setting AMQ_SCHEDULED_DELAY doesn't work
- Async usage?
- Cannot read properties of undefined (reading 'send')
- Get properties of message
- How to keep the connection open and also set connection timeout?
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 stompit.