Spring Team
Gary Russell

Gary Russell

Project Lead, Spring Integration, AMQP

Pennsylvania, USA

Gary has been in software engineering, concentrating on Enterprise Integration, for over 30 years on various platforms, and in the Java space since the late '90s. He has been developing with the Spring Framework since 2004. He has been a committer on the Spring Integration and Spring AMQP projects for over 6 years, and now leads both projects.
Blog Posts by Gary Russell

Spring AMQP 1.7.0.RELEASE (and 1.6.7) Available

On behalf of the Spring Integration team I’d like to announce that Spring AMQP 1.7.0.RELEASE is now available.

This release is mainly an intermediate version between 1.6.x and 2.0 for Spring Boot 1.5 and IO Platform Brussels dependencies compatibility.

However, there are several improvements and new features to explain here:

  • Upgrade to Amqp Client 4.0 with appropriate RabbitConnectionFactoryBean changes

  • Upgrade to Log4j 2.7 and required breaking change fix for the log4j2.AmqpAppender

  • Upgrade to Spring Retry 1.2 with important StatefulRetryOperationsInterceptor.setUseRawKey(true) for backward compatibility

  • a new spring-rabbit-junit artifact is provided with several utilities (like BrokerRunning @Rule) which can be useful for testing Spring AMQP applications

  • The SimpleMessageListenerContainer can now be started without queues to listen to at all. They can be provided later at runtime via addQueues()

  • a ConnectionNameStrategy is provided for the ConnectionFactory to allow to identify application connections in the Broker or other monitoring and tracing tools

Read more...

Spring Integration 5.0 Milestone 1 Available

We are pleased to announce that the first milestone for the 5.0 version of Spring Integration is now available.

This is a new major version, based on Spring Framework 5.0 and requires Java 8; this is the biggest change so far, but the following are also included:

  • The Java DSL is now rolled into the framework itself; there are some minor changes to the DSL, such as the removal of the .handleWithAdapter() methods and some general Factory classes. A complete discussion of the DSL changes can be found in the Migration Guide.

  • Upgrade to Spring Data Kay.

  • Upgrade to Spring AMQP 2.0.

  • First class support for TCP/UDP has been added to the DSL.

  • Spring Integration is now based on Reactor 3.0 and Messaging Gateway Promise methods now have to be changed to return Mono.

  • You can now configure mid-flow transactions via TransactionHandleMessageAdvice for adviceChain Messaging Annotations attribute and <transactional> sub-element when using XML configuration.

Read more...

Spring AMQP 2.0 Milestone 1 Available

We are pleased to announce the first milestone of Spring AMQP 2.0 is now available.

For a complete list of changes; see the what’s new in the reference manual and the release notes.

Here are some highlights of this release

  • The framework is now fully Java 8 based; several functional interfaces are provided for convenient Lambda implementations (callbacks, ReplyingMessageListener etc). Java 8 is now a requirement. It is also based on Spring Framework 5.0.

  • The framework uses the new 4.0 amqp-client library.

  • A new DirectMessageListenerContainer is now available alongside the existing SimpleMessageListenerContainer. The new container actually has a simpler architecture and the listener is called directly on the amqp-client thread (hence the name Direct…​). See Choosing a Container to help you decide which container is appropriate for your application.

  • A subclass - DirectReplyToMessageLisenerContainer - is also provided, specifically for using the RabbitMQ Direct ReplyTo feature for request/reply messaging. This is now used by the RabbitTemplate (by default) rather than creating a consumer per request/reply as was the case previously. Consumers are cached for reuse.

  • The AsyncRabbitTemplate now supports direct replyTo, utilizing the new container; previously the async template did not support direct replyTo.

  • @RabbitListener annotations can now be configured with an error handler and the ability to send exceptions to the sender when request/reply messaging is being used.

  • Connection and channel listeners now receive shutdown signals.

  • You can now assign names to connections created by Spring AMQP - the name appears on the RabbitMQ Admin UI.

  • Limited stateful retry (1 redelivery attempt) is now available (when an inbound message does not have a message id) without the need to configure a MissingMessageIdAdvice which has now been removed from the framework. Spring Retry 1.2 is required to support this feature.

  • The log4j appender is no longer provided due to the EOL of log4j (the log4j2 and logback appenders remain available).

Read more...

Spring AMQP and Spring Integration Core & Java DSL Maintenance Releases Available

Spring Integration 4.3.5 and 4.2.12 are now available, as well as Spring AMQP 1.6.5.

The 1.1.4 and 1.2.1 versions of the Spring Integration Java DSL are also available.

These include some important bug fixes and all users are encouraged to upgrade. Click on the release links above to see closed issues.

See the project pages for documentation, download information etc.

Stay tuned for updates on next year’s Spring Integration 5.0 release (the first milestone is due in a few weeks); the Java DSL is being merged into the core project and we will be adding first class support for additional components such as TCP.

Read more...

Spring for Apache Kafka 1.1.0 Milestone 2 Available

I am pleased to announce that the second milestone for Spring for Apache Kafka version 1.1.0.M2 is now available in the spring milestone repo.

This includes some bug fixes and the following new features:

@KafkaListener(id = "list", topics = "myTopic",
                          containerFactory = "batchFactory")
public void listen(List<String> list) {
    ...
}
Read more...

Spring for Apache Kafka 1.1.0 Milestone 1 Available

I am pleased to announce that the Spring for Apache Kafka 1.1.0.M1 milestone release is available now.

As usual, thanks to the community for any feedback and contribution as always!

Highlights of this release:

  • Support for the 0.10.x.x client (use 1.0.x for the 0.9.x.x client)

  • Support for listeners that receive the entire batch of messages returned by the consumer.poll() operation

  • Support for null payloads - used to delete keys when using log compaction

  • Allow setting the initial offset to be relative to the current offset

Read more...

Spring Integration 4.3.0 Release Candidate Available

I am pleased to announce the availability of Spring Integration 4.3.0.RC1 - the first (and final) release candidate; it is available from the spring milestone repo The GA release should follow shortly after the GA release of Spring Framework 4.3.

4.2.6.RELEASE is also available in the spring release repo as well as maven central. This release includes a few important bug fixes and all users are encouraged to upgrade to it.

4.3 is only a minor release with a few new features and improvements over 4.2 and will close out the 4.x line. Meanwhile we are looking forward to embrace the Reactive Foundation for the JVM in Spring Integration 5.0. We have yet to determine exactly what that means, so stay tuned! In addition, 5.0 (2017) will include the (currently separate) Spring Integration Java DSL.

Read more...

Spring AMQP 1.6.0 Release Candidate (and 1.5.6) Available

We are pleased to announce that the Spring AMQP 1.6 release candidate (1.6.0.RC1) is now available in the spring milestone repo.

The 1.5.6 maintenance release is also available with a few bug fixes.

Here is a summary of the 1.6.0 release contents, for more details, refer to the what’s new in the reference documentation as well as the closed JIRA Issues for this release.

  • A new jar spring-rabbit-test containing a test harness to help with testing @RabbitListener methods; see the testing chapter.

  • Multiple @RabbitListener annotations on a method (when using Java 8) and the @RabbitListeners annotation (for pre-Java 8), each allowing the same method to be the listener method for multiple listener containers.

  • Full support for the Delayed Message Exchange RabbitMQ plugin.

  • An AsyncRabbitTemplate returning ListenableFuture<?> for request/reply messaging.

  • An option to publish ApplicationEvents when listener containers go idle.

  • The caching connection factory now exposes cache statistics

  • @RabbitListener methods now communicate type information to the message converter for inbound messages. This means, for example, the Jackson2JsonMessageConverter no longer needs a custom class mapper when a message without type information in the headers is received (e.g. from a sender that is not a Spring AMQP app). Instead, the @RabbitListener method parameter type is used in the conversion. In addition, the Method and bean are also made available via message properties to custom converters.

Read more...

Spring AMQP 1.6.0 Milestone 2 (and 1.5.5) Available

We are pleased to announce the second milestone of Spring AMQP 1.6 is available.

Additions since the first milestone include:

  • The caching connection factory now exposes cache statistics

  • @RabbitListener methods now communicate type information to the message converter for inbound messages. This means, for example, the Jackson2JsonMessageConverter no longer needs a custom class mapper when a message without type information in the headers is received (e.g. from a sender that is not a Spring AMQP app). Instead, the @RabbitListener method parameter type is used in the conversion. In addition, the Method and bean are also made available via message properties to custom converters.

Read more...