pulsar-client-go
pulsar-client-go copied to clipboard
[Issue 443] add context param in producer interceptor
This PR address issue-443
Ability to add properties to message before sending using context param.
Modified the producer interceptor methods to accept context
parameter.
The Logic LGTM +1, as @cckellogg said, maybe we can add a new API for this change, e.g:
BeforeSendWithContext(ctx context.Context, producer Producer, message *ProducerMessage)
BeforeSendWithContext(ctx context.Context, producer Producer, message *ProducerMessage)
Adding a new function to the interface will still be a breaking change. Applications will have have to implement the new method and recompile. I think that's what we need to figure out. Do we need to support backward compatibility or is making a breaking api change ok for the next release.
BeforeSendWithContext(ctx context.Context, producer Producer, message *ProducerMessage)
Adding a new function to the interface will still be a breaking change. Applications will have have to implement the new method and recompile. I think that's what we need to figure out. Do we need to support backward compatibility or is making a breaking api change ok for the next release.
Yes, my mistake. It seems that adding context does have actual usage scenarios and can further improve the processing capabilities of the interceptor itself.
If we want to add this feature without breaking backward compatibility, can we try to directly expose a new interface to the user in ProducerOptions?
For exampels, in ProducerOptions
:
// A chain of interceptors with context, These interceptors will be called at some points defined in ProducerInterceptorWithContext interface
InterceptorsWithContext ProducerInterceptorsWithContext
and introduce a new interface ProducerInterceptorsWithContext
:
type ProducerInterceptorsWithContext interface {
BeforeSendWithContext(ctx context.Context,producer Producer, message *ProducerMessage)
OnSendAcknowledgement(producer Producer, message *ProducerMessage, msgID MessageID)
}
But it is not a very elegant way to achieve