Еще один способ принять во внимание - это возможности ответа на слушателе.
См. AbstractRabbitListenerContainerFactory
JavaDocs:
/**
* Set a {@link RetryTemplate} to use when sending replies; added to each message
* listener adapter.
* @param retryTemplate the template.
* @since 2.0.6
* @see #setReplyRecoveryCallback(RecoveryCallback)
* @see AbstractAdaptableMessageListener#setRetryTemplate(RetryTemplate)
*/
public void setRetryTemplate(RetryTemplate retryTemplate) {
this.retryTemplate = retryTemplate;
}
/**
* Set a {@link RecoveryCallback} to invoke when retries are exhausted. Added to each
* message listener adapter. Only used if a {@link #setRetryTemplate(RetryTemplate)
* retryTemplate} is provided.
* @param recoveryCallback the recovery callback.
* @since 2.0.6
* @see #setRetryTemplate(RetryTemplate)
* @see AbstractAdaptableMessageListener#setRecoveryCallback(RecoveryCallback)
*/
public void setReplyRecoveryCallback(RecoveryCallback<?> recoveryCallback) {
this.recoveryCallback = recoveryCallback;
}
И вы правы: вы можете использовать start()/stop()
также.По этой причине вам нужно ввести боб RabbitListenerEndpointRegistry
и использовать его:
/**
* Return the {@link MessageListenerContainer} with the specified id or
* {@code null} if no such container exists.
* @param id the id of the container
* @return the container or {@code null} if no container with that id exists
* @see RabbitListenerEndpoint#getId()
* @see #getListenerContainerIds()
*/
public MessageListenerContainer getListenerContainer(String id) {
Чтобы получить доступ к соответствующему контейнеру слушателя для ваших @RabbitListener
и stop()
или start()
, в соответствии с вашимлогика.