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 2.0.0 Milestone 4 is Available

I am pleased to announce that the fourth milestone of Spring AMQP 2.0 2.0.0.M4 is now available in the Spring milestone repository.

Features since the last milestone include…​

  • The new DirectMessageListenerContainer now supports configuring the number of messages to process between acks.

  • You can now specify container concurrency on the @RabbitListener annotation.

The release candidate is expected to be released in early June with the GA shortly after the Spring Framework 5.0 GA release.

For a complete list of changes in 2.0, see What’s New in the reference manual; also see the release notes for 2.0.0.M1, 2.0.0.M2, 2.0.0.M3, as well as 2.0.0.M4.

Read more...

Spring For Apache Kafka 2.0 Milestone 1 Available

We are very pleased to announce the availability of the first milestone of the Spring for Apache Kafka 2.0 release 2.0.0.M1.

Significant new features in the 2.0 line include:

  • Support for timestamps in the KafkaTemplate.

  • Seek to beginning/end of topics.

  • New threading model facilitated by KIP-62 - now that the consumer client does not rely on poll() being called frequently, the threading model is much simpler; avoiding the need for internal pause() / resume() processing. Listeners are now always invoked on the consumer thread. This, in turn, has facilitated:

  • ConsumerAwareMessageListener (and BatchConsumerAwareMessageListener) are provided so that listener implementations can access the Consumer<?, ?> object to perform operations such as pause(), resume(), metrics() etc.

  • @KafkaListener POJO methods can now be annotated with @SendTo to send the method result to some other topic.

Read more...

Spring For Apache Kafka 1.2.0 and 1.1.4 Available

We are pleased to announce that these maintenance releases of Spring for Apache Kafka are now available, 1.2.0.RELEASE and 1.1.4.RELEASE.

These versions include several bug fixes and improvements, as well as introduce support for KStreams.

They are functionally equivalent; the 1.2.0.RELEASE is based on the 0.10.2.0 kafka-clients jar and 1.1.4.RELEASE can be used with 0.10.0.x and 0.10.1.x.

While 1.1.4.RELEASE will work at runtime with a 0.10.2.x client library, some breaking changes in the embedded kafka API means that the embedded kafka Junit @Rule in spring-kafka-test will not work and 1.2.0.RELEASE is required for that.

Read more...

Spring AMQP 2.0.0 Milestone 3 is Available

We are pleased to announce that the third milestone for the Spring AMQP 2.0 release (2.0.0.M3) is now available.

36 JIRA Issues are included in this release, including bug fixes and a number of new features:

  • Initial support for broker-less integration testing - the TestRabbitTemplate discovers listener containers in the application context and invokes those containers' listeners for send() and sendAndReceive() operations. We intend to flush out this capability with more features before GA, including routing, and simulation of the various exchange types supported by RabbitMQ. Feedback is welcome.

  • Rollback with an external transaction manager is now consistent with local transactions.

  • The 4.1.x amqp-client library is now the default.

  • The RabbitTemplate now has an invoke() method which allows multiple operations to be performed sequentially on the same channel. This also enables features such as waitForConfirmsOrDie() provided by the underlying library, when sending multiple messages to the same channel.

  • null message properties are no longer included in toString() which makes debug logs easier to read.

  • @QueueBinding annotations now support multiple routing keys, and support custom exchange types.

Read more...

Spring Integration 4.3.7 is Available

On behalf of the Spring Integration team, I am pleased to announce that the 4.3.7.RELEASE of Spring Integration is now available.

This release contains a few important bug fixes as well as a couple of improvements.

In particular, this version uses the recently announced Spring Framework 4.3.6.

Please be aware that some performance issues were detected when using Spring Integration with Spring Framework versions 4.3.4 and 4.3.5. We recommend that all users upgrade to this version, but this could be particularly important for users of Spring Integration versions 4.3.5 and 4.3.6, which used those versions of Spring Framework respectively. See this issue for details to see if you are affected

Read more...

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...