Comments (7)
aww bummer dude! – your suggested solutions sounds really nice, actually, but I think I need to think a little bit about this..... brb 😄
from rebus.amazonsqs.
Created a PR with a 'possible' solution to the issue.
from rebus.amazonsqs.
#5 looks pretty good, and I can definitely see how this solution could work. It just bothers me that the user then needs to predict the number of headers before setting up Rebus with SQS in order to configure whether headers should be packed.
I can see that the SendMessageBatchRequestEntry
has a field for the message ID – so there's one header that can be saved 😄
from rebus.amazonsqs.
In the docs it states that the size of the message cannot exceed 256 kB. Both message attributes and the body count towards this limit.
IIRC the Azure Storage Queues transport packs transport messages into a single JSON string, something like this:
{
"headers": {
"whee": "good stuff"
},
"body": "3yg873BASE64andstuff"
}
Wouldn't it be better to do that with SQS too? And then simply ditch the built-in attributes because they have stupid arbitrary limitations (max 10, cannot start with the string 'aws', cannot contain two successive .s, etc.)....
What do you think about this idea?
from rebus.amazonsqs.
I guess your suggestion would work as well, with the added benefit that you're no longer constrained with 10 being the maximum number of headers allowed.
The main disadvantage with pushing the headers to the body of the message is that the headers are no longer human readable when you switch to an alternative serialization mechanism, like protobuf, or even when you encode the body to base64. You can't really peek into the messages whenever something goes wrong. That's why I smashed the headers together.
Another alternative is to have all non-core Rebus headers moved to the body, while keeping the core rebus headers in the current header attributes?
from rebus.amazonsqs.
Played around with the code and performed a test run which allowed me to create messages as you stated above. As an example, this is het body of the message:
{"headers":{"rbs2-msg-id":"66d63a56-56b4-442e-8c27-cccb84ce23ba","rbs2-corr-id":"56b44407-398b-487a-b41b-fdd649e10fd0"},"body":"aGVq"}
No message attributes were added. I also had a closer look at the protobuf serializer, and it seems only the body is serialized, not the headers, which basically solves the issue about human readability I was talking about.
I'll put together a new pull request with these changes.
from rebus.amazonsqs.
Fixed by #6 😄
from rebus.amazonsqs.
Related Issues (20)
- Doesn't work with .net core 2.1 HOT 3
- Rebus is publishing to queues it's not configured for HOT 1
- v3 and v4 compatiblity HOT 2
- Support transporting messages > 256kb via S3 HOT 6
- Support for FIFO queues HOT 3
- Rebus not subscribing on aws HOT 4
- Problem with deferred messages HOT 1
- Dependency package versions HOT 1
- deferCount is not increasing HOT 2
- deferCount is not increasing HOT 5
- A message received from SQS just after bus disposal is made invisible in SQS HOT 2
- Suggestion: Add required ACL's to readme.md? HOT 2
- Change visibility time on abort HOT 3
- Referenced package AWSSDK.SQS is a older version, which causes version conflicts HOT 1
- Use of Rebus with "native" AWS messages? HOT 2
- Unable to subscribe to messages HOT 1
- Receiving SQS Messages from Eventbridge HOT 1
- Support creation of FIFO queues
- sqs:SendMessage permission is required HOT 2
- manually "receive" a message to the bus HOT 1
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 rebus.amazonsqs.