-
Notifications
You must be signed in to change notification settings - Fork 400
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
amqp message rejected if header is not string #65
Comments
Metadata are strings because almost all of Pub/Subs are supporting only simple types for metadata. So the main thing that we need to keep is to make So to solve it and keep backward compatibility we can make custom marshaling of Unfortunately it will not work for all non-string headers, but the question is that is there any default non-string headers? If someone have something custom, he should probably to implement custom marshaller. |
Until now it's the only one that makes problems, my example value (dump by spew):
|
OK, custom marshaler works for me, thanks. |
I have couple ideas how it can be fixed, but nothing sounds good:
But 3 and 4 sounds most reasonable. What do you think? |
clarifying 3:
If you mean something like that, I like that :) |
Exactly :) |
Does anyone know how many data types of a header can be other than string, in Golang context and AMQP context? |
I think I found how each AMQP type is mapped to a Go type. https://github.com/rabbitmq/amqp091-go/blob/5c9eb2241d43a1d2ff3ae0c98b7153a38625973d/read.go#L142-L159 I think gob cannot be used in this case because it is possible for an AMQP type to be mapped to nil in Go, and gob cannot encode nil values. |
Hi I am encountering this issue as well. Im using the delayed message plugin for amqp and also quorum type queues. These functionalities respectively utilize the "x-delay" and add the "x-delivery-count" keys with a numeric value. Adding a prefix will break the functionality of the "x-delay" value and is not possible for the "x-delivery-count" header that is added by amqp itself, or am I misunderstanding the solution? |
Hi! Created PR that should handle that issue! If we are happy just to |
I've got message with header that is not string, and it gets rejected by watermill:
[watermill] 2019/04/17 15:48:14.371452 subscriber.go:245: level=ERROR msg="Processing message failed, sending nack" amqp_exchange_name=x amqp_queue_name=y err="metadata x-death is not a string, but []interface {}....
x-death
header is added by dead letter, and I would like to process this message again after some time in DL.My flow looks like this:
Most simple solution is to ignore headers that are not strings and not add them to Metadata - this would work me.
I'm willing to make fix/PR, but please advise if that's good solution or should I do it in some other way (maybe flattening
The text was updated successfully, but these errors were encountered: