pulsar-client-go icon indicating copy to clipboard operation
pulsar-client-go copied to clipboard

[Issue 443] add context param in producer interceptor

Open GPrabhudas opened this issue 3 years ago • 3 comments

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.

GPrabhudas avatar Sep 08 '21 10:09 GPrabhudas

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)

wolfstudy avatar Sep 16 '21 14:09 wolfstudy

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.

cckellogg avatar Sep 16 '21 18:09 cckellogg

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

wolfstudy avatar Sep 17 '21 06:09 wolfstudy