Code Monkey home page Code Monkey logo

Comments (7)

mookid8000 avatar mookid8000 commented on June 16, 2024

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.

mvandevy avatar mvandevy commented on June 16, 2024

Created a PR with a 'possible' solution to the issue.

from rebus.amazonsqs.

mookid8000 avatar mookid8000 commented on June 16, 2024

#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.

mookid8000 avatar mookid8000 commented on June 16, 2024

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.

mvandevy avatar mvandevy commented on June 16, 2024

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.

mvandevy avatar mvandevy commented on June 16, 2024

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.

mookid8000 avatar mookid8000 commented on June 16, 2024

Fixed by #6 😄

from rebus.amazonsqs.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.