This repository has been archived by the owner on Oct 31, 2024. It is now read-only.
WIP: prototype new spec for messaging systems #210
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Prototyping amqplib (rabbitmq)
General
Routing Combinations
Exchange is the pubsub
Queue is what consumers receive messages from
Routing key is set in send and is used to forward messages from exchange to queue
Exchange name - known to instrumentation
Routing key - known to instrumentation
Exchange type - not known to instrumentation
Binding pattern - not known to instrumentation
Queue name - known to instrumentation.
Routing Scenarios
sendToQueue
)Changes
“messagin.rabbitmq.exchange_name” (new attribute)
“messagin.rabbitmq.routing_key”
“messaging.message_id”
“messaging.conversation_id”
For consumer - change to queue semantics
For producer - destination is exchange name and type is topic.
Relax the current specification requirement
Include only exchange name in publish span (assuming it’s low cardinality)
Replace “send” in publish span to “publish” to make it consistent with the library’s API.
Replace “process” with “deliver” in consumer name
“messaging.operation”: “settle”
Kind = client
Add 2 links per message pointing to “send” and “deliver” contexts. Add message attribute “messaging.operation” to distinguish.
Add all message attributes from “deliver” to the “deliver” link on “settlement”
Set span to error if settlement is “reject”, “nack”, “nackAll”, “channelClose”, “channelError”
Quietly settle messages that timeout after enough time
Open Questions
Symmetric with publish
Feasible for rabbit, not in other clients
No good support in jaeger and vendors
Add requeue attribute?
Add “allUpTo” attribute?
Semantic attribute for settlement type (ack, nack, reject, ackAll, nackAll, channelClose, channelError)?
Semantic meaning to the error in this case (reject)