From fd1c08a99d576aa4b49cd1bb4b94be64f17754f0 Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Thu, 23 Oct 2014 12:00:41 +0300 Subject: [PATCH] AMQP-435 RabbitMQ Client 3.4.x Compatibility JIRA: https://jira.spring.io/browse/AMQP-435 Add ...NoWait methods to the PublisherCallbackChannelImpl. Invoke the wait versions for now; add TODOs to change to the ...NoWait versions when 3.4.0 is the minimum client. AMQP-435 Polishing - Add getDelegate() Throw UnsupportedOperationException telling users to invoke via getDelegate(). Add `What's New` notice --- build.gradle | 4 +- .../support/PublisherCallbackChannel.java | 8 +++ .../support/PublisherCallbackChannelImpl.java | 56 +++++++++++++++++++ src/reference/docbook/whats-new.xml | 8 +++ 4 files changed, 74 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index de57c909..796bbc87 100644 --- a/build.gradle +++ b/build.gradle @@ -80,9 +80,9 @@ subprojects { subproject -> log4jVersion = '1.2.17' logbackVersion = '1.1.2' mockitoVersion = '1.9.5' - rabbitmqVersion = project.hasProperty('rabbitmqVersion') ? project.rabbitmqVersion : '3.3.4' + rabbitmqVersion = project.hasProperty('rabbitmqVersion') ? project.rabbitmqVersion : '3.3.5' - springVersion = project.hasProperty('springVersion') ? project.springVersion : '4.1.0.RELEASE' + springVersion = project.hasProperty('springVersion') ? project.springVersion : '4.1.1.RELEASE' springRetryVersion = '1.1.2.RELEASE' } diff --git a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/support/PublisherCallbackChannel.java b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/support/PublisherCallbackChannel.java index 231c0167..fa0818e2 100644 --- a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/support/PublisherCallbackChannel.java +++ b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/support/PublisherCallbackChannel.java @@ -64,6 +64,14 @@ public interface PublisherCallbackChannel extends Channel { */ void addPendingConfirm(Listener listener, long seq, PendingConfirm pendingConfirm); + /** + * Use this to invoke methods on the underlying rabbit client {@link Channel} that + * are not supported by this implementation. + * @return The underlying rabbit client {@link Channel}. + * @since 1.4. + */ + Channel getDelegate(); + /** * Listeners implementing this interface can participate * in publisher confirms received from multiple channels, diff --git a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/support/PublisherCallbackChannelImpl.java b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/support/PublisherCallbackChannelImpl.java index 2f86916a..ec55113d 100644 --- a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/support/PublisherCallbackChannelImpl.java +++ b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/support/PublisherCallbackChannelImpl.java @@ -558,6 +558,62 @@ public class PublisherCallbackChannelImpl this.delegate.clearReturnListeners(); } +// @Override + public void exchangeBindNoWait(String destination, String source, + String routingKey, Map arguments) throws IOException { + //TODO: invoke delegate's ...NoWait when min client is 3.4.0 + throw new UnsupportedOperationException("To use the ...NoWait methods, use getDelegate()."); + } + +// @Override + public void exchangeDeclareNoWait(String exchange, String type, + boolean durable, boolean autoDelete, boolean internal, + Map arguments) throws IOException { + //TODO: invoke delegate's ...NoWait when min client is 3.4.0 + throw new UnsupportedOperationException("To use the ...NoWait methods, use getDelegate()."); + } + +// @Override + public void exchangeDeleteNoWait(String exchange, boolean ifUnused) throws IOException { + //TODO: invoke delegate's ...NoWait when min client is 3.4.0 + throw new UnsupportedOperationException("To use the ...NoWait methods, use getDelegate()."); + } + +// @Override + public void exchangeUnbindNoWait(String destination, String source, + String routingKey, Map arguments) + throws IOException { + //TODO: invoke delegate's ...NoWait when min client is 3.4.0 + throw new UnsupportedOperationException("To use the ...NoWait methods, use getDelegate()."); + } + +// @Override + public void queueBindNoWait(String queue, + String exchange, String routingKey, Map arguments) throws IOException { + //TODO: invoke delegate's ...NoWait when min client is 3.4.0 + throw new UnsupportedOperationException("To use the ...NoWait methods, use getDelegate()."); + } + +// @Override + public void queueDeclareNoWait(String queue, + boolean durable, boolean exclusive, boolean autoDelete, + Map arguments) + throws IOException { + //TODO: invoke delegate's ...NoWait when min client is 3.4.0 + throw new UnsupportedOperationException("To use the ...NoWait methods, use getDelegate()."); + } + +// @Override + public void queueDeleteNoWait(String queue, + boolean ifUnused, boolean ifEmpty) throws IOException { + //TODO: invoke delegate's ...NoWait when min client is 3.4.0 + throw new UnsupportedOperationException("To use the ...NoWait methods, use getDelegate()."); + } + + public Channel getDelegate() { + return delegate; + } + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // END PURE DELEGATE METHODS ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/reference/docbook/whats-new.xml b/src/reference/docbook/whats-new.xml index 1879795b..f1087d5b 100644 --- a/src/reference/docbook/whats-new.xml +++ b/src/reference/docbook/whats-new.xml @@ -147,6 +147,14 @@ catch (MessageConversionException e) { AmqpException catch block. +
+ RabbitMQ 3.4 Compatibility + + Now the Spring AMQP is compatible with the RabbitMQ 3.4. + However Spring AMQP still keeps the minimal RabbitMQ Client library in version + 3.3.x to provide backward compatibility with legacy applications. + +