I think we should just allow the user to inject a `RetryTemplate` and by default create one with the current behavior (like you have in the `BQC`. We can then simply pass the `RetryTemplate` instance into the constructor here.

They might want more customization including the retry policy; they also might want to register listeners with the template.