Releases: rabbitmq/rabbitmq-java-client
4.1.1.RC2
Changes between 4.1.0 and 4.1.1.RC2
This is a release candidate for 4.1.1, a maintenance release that includes bug fixes and a small improvement in the RpcServer
class. This release is backward-compatible with 4.1.0.
Handle TimeoutException
on connection creation
When several addresses are provided to the ConnectionFactory
and when an address throws a TimeoutException
on connection creation, the client wouldn't try the next addresses and throw an exception. Now the client tries to connect to the next address even on a TimeoutException
.
GitHub issue: #262
Let reply properties be updated in RpcServer
subclasses
The properties of a response message can now be updated with the preprocessReplyProperties
and postprocessReplyProperties
methods that are called around the handleCall
method.
GitHub issue: #271
Remove e2e bindings for auto-delete exchanges
It was possible to have abandoned e2e bindings in the recordedBindings. This caused a channel error during recovery and caused remaining recovery items to fail as well.
Thanks to vikinghawk for this contribution.
GitHub PR: #281
basicCancel
and basicConsume
honor RPC timeout
The 2 methods basicCancel
and basicConsume
now use the channel RPC timeout (they used to not use any timeout at all).
Thanks to vikinghawk for this contribution.
GitHub PR: #278
v4.1.1.RC1
Changes between 4.1.0 and 4.1.1.RC1
This is a release candidate for 4.1.1, a maintenance release that includes a bug fix on connection creation and a small improvement in the RpcServer
class. This release is backward-compatible with 4.1.0.
Handle TimeoutException
on connection creation
When several addresses are provided to the ConnectionFactory
and when an address throws a TimeoutException
on connection creation, the client wouldn't try the next addresses and throw an exception. Now the client tries to connect to the next address even on a TimeoutException
.
GitHub issue: #262
Let reply properties be updated in RpcServer
subclasses
The properties of a response message can now be updated with the preprocessReplyProperties
and postprocessReplyProperties
methods that are called around the handleCall
method.
GitHub issue: #271
4.0.3.RC1
Changes between 4.0.2 and 4.0.3.RC1
This is a release candidate for 4.0.3, a maintenance release that includes a bug fix on connection creation. This release is backward-compatible with 4.0.2.
Handle TimeoutException on connection creation
When several addresses are provided to the ConnectionFactory
and when an address throws a TimeoutException
on connection creation, the client wouldn't try the next addresses and throw an exception. Now the client tries to connect to the next address even on a TimeoutException
.
GitHub issue: #262
4.1.0
Changes between 4.0.2 and 4.1.0
This is a maintenance release with a few improvements, focused mainly on usability. It's backward compatible with 4.0.x.
Make continuation timeouts configurable
It is now possible to set a timeout for synchronous AMQP calls (e.g. queueDeclare
). The default timeout is 10 minutes (there was no timeout at all before that).
GitHub issue: #219
Emit a warning in NullTrustManager
NullTrustManager
trusts every server certificate, it is not considered safe to use it in production. A message now warns against its usage and suggests some solutions.
GitHub issue: #230
Deprecate NullTrustManager
NullTrustManager
is deprecated in favor of a implementation with a more explicit name: TrustEverythingTrustManager
. This new implementation has the same behavior as NullTrustManager
(including the warning mesage introduced in this release).
GitHub issue: #234
Create abstract class for metrics collection
Metrics collector implementations can now subclass AbstractMetricsCollector
, which contains the tricky metrics collection logic. This makes the metrics collection easier to extend with new metrics library (e.g. Dropwizard Metrics in the Java client or Spring Boot Metrics).
GitHub issue: #222
4.1.0.RC1
Changes between 4.0.2 and 4.1.0.RC1
This is a pre-release with a few improvements, focused mainly on usability. It's backward compatible with 4.0.x.
Make continuation timeouts configurable
It is now possible to set a timeout for synchronous AMQP calls (e.g. queueDeclare
). The default timeout is 10 minutes (there was no timeout at all before that).
GitHub issue: #219
Emit a warning in NullTrustManager
NullTrustManager
trusts every server certificate, it is not considered safe to use it in production. A message now warns against its usage and suggests some solutions.
GitHub issue: #230
Deprecate NullTrustManager
NullTrustManager
is deprecated in favor of a implementation with a more explicit name: TrustEverythingTrustManager
. This new implementation has the same behavior as NullTrustManager
(including the warning mesage introduced in this release).
GitHub issue: #234
Create abstract class for metrics collection
Metrics collector implementations can now subclass AbstractMetricsCollector
, which contains the tricky metrics collection logic. This makes the metrics collection easier to extend with new metrics library (e.g. Dropwizard Metrics in the Java client or Spring Boot Metrics).
GitHub issue: #222
v4.0.2
Changes between 4.0.1 and 4.0.2
This is a maintenance release that includes a bug fix in the NIO connector. This release is backward-compatible with 4.0.1.
NIO main thread can terminate due to an unhandled AssertionError
An AssertionError
can be thrown in some edge cases and terminates the NIO main thread. This type of exception is now properly handled. AssertionError
is actually not justified in this case, but this behavior is kept for compatibility reasons. More appropriate exceptions will be used in 5.0.0 (see #239).
GitHub issue: #237
4.0.2.RC1
Changes between 4.0.1 and 4.0.2.RC1
This is a release candidate for 4.0.2, a maintenance release that includes a bug fix in the NIO connector. This release is backward-compatible with 4.0.1.
NIO main thread can terminate due to an unhandled AssertionError
An AssertionError
can be thrown in some edge cases and terminates the NIO main thread. This type of exception is now properly handled. AssertionError
is actually not justified in this case, but this behavior is kept for compatibility reasons. More appropriate exceptions will be used in 5.0.0 (see #239).
GitHub issue: #237
4.0.1
Changes between 4.0.0 and 4.0.1
This is a maintenance release that includes a few improvements. All users of 4.0.0 are encouraged to upgrade to this version.
This release is available from Maven Central.
Always use monotonically growing clock function in BlockingCell
BlockingCell
now always uses System.nanoTime()
to evaluate duration in timeout methods. This avoids errors when system clock changes.
Thanks to dhakimTRX for this contribution.
GitHub PR: #224
Add toString()
to AutorecoveringChannel
Thanks to Gary Russel for this contribution.
GitHub issue: #217
Comply to Android StrictMode
This was actually fixed in 3.6.7 but is worth mentioning here. A non-correctly closed InputStream
was causing failure when running on Android with StrictMode enabled.
Thanks to Tobias Knell for this contribution.
GitHub PR: #232
v4.0.0
Changes between 3.6.x and 4.0.0
RabbitMQ Java Client 4.0.0 doesn't bring any breaking changes to application APIs (e.g. Consumer
), the major version upgrade rather marks the decoupling of the Java Client project from the RabbitMQ broker, at least for release cycle and versioning.
This decoupling will make it easier and faster to ship bug fixes and new features. This is also the occasion to adopt semantic versioning.
A few new methods have been added to the Connection
, Channel
, and RecoveryListener
interfaces. These interfaces are more likely to be implemented in libraries (e.g. wrappers of the client) than in applications, but in any case, ensure you add those new methods to your implementation classes.
This release is available from Maven Central.
Enable automatic connection recovery by default
Automatic connection recovery has been there for a few years now, and we know that many users always enable it, so we've decided to enable it by default. You can still choose not to use it, but you'll need to disable it explicitly.
GitHub issue: #214
Logging library integration
SLF4J is now used in several places of the Java Client to report logging messages. It's also used in the default exception handler implementation that ships with the client. This gives the application developer a large choice of logging implementations (e.g. Logback, Log4j) and a large choice of destinations to direct logs to (file, but also logging-specific protocols).
GitHub issue: #114
Add support for metrics
The Java Client can now gather runtime metrics such as number of sent and received messages. The metrics are collected by default through Dropwizard Metrics library, but collection is pluggable if you have some fancy requirements. Using Dropwizard Metrics gives the opportunity to use many monitoring backends out-of-the-box: JMX, Spring Boot metrics endpoint, Ganglia, Graphite, etc.
GitHub issue: #79
Support NIO
The Java Client has been historically using the traditional Java blocking IO library (i.e. Socket
and its Input/OutputStream
s). This has been working for years, but isn't adapted to all kinds of workloads. Java NIO allows for a more flexible, yet more complex to implement model to handle network communication. Long story short, Java NIO allows to handle more connections with fewer threads (the blocking IO mode always needs one thread per connection). Java NIO is an opt-in and is disabled by default.
This feature is still considered experimental: even though our test suite passes in NIO mode, we haven't got feedback yet from production projects.
GitHub issue: #11
Support dynamic versioning
Now the Java Client isn't tied to RabbitMQ server releases, supporting dynamic versioning is possible. This will make easier for users to know if they can safely upgrade to a new version of the client, if they can benefit from new features, etc.
GitHub issue: #123
Extract Tracer into a separate project
The AMQP Tracer is now hosted in a separate project. See the documentation for more details.
GitHub issue: #204
Extract PerfTest into a separate project
The PerfTest tool is now hosted in a separate project. See the documentation for more details.
GitHub issue: #196
Prevent Socket.write() from blocking
When the connection was lost between the client and the server, the Java Client could block on write operations until the underlying socket was closed by the operating system (after several minutes on Linux). This has been solved by making part of the shutdown sequence asynchronous.
GitHub issue: #194
UnknownChannelException in AMQConnection.MainLoop.run
Corner cases (e.g. channel closed - thus no longer known from the client - with an in-flight delivery) could trigger fatal exceptions. Those cases are now handled and just logged.
GitHub issue: #189
Add Recoverable[Connection/Channel] interfaces
This makes casting and using a recoverable connection/channel a bit easier than casting to either just Recoverable (which just exposes the two methods) or the concrete class.
GitHub issue: #137
Make socket connection to try all DNS record IPs
GitHub issue: #138
Finish transition to Maven
The build doesn't depend on Ant anymore.
Bump default TLS protocol version to TLS v1.2
TLS v1.2 is used by default only if the client JVM supports it, otherwise the client automatically falls back to TLS v1.0.
GitHub issue: #139
Begin recovery after all shutdown listeners have been given a chance to run
GitHub issue: #135
Enhance RpcClient: Provide access to message metadata
GitHub issue: #134
Contributed by Zac Farrell.
Make Connection implement Closeable interface
GitHub issue: #131
Contributed by Karl "Khazrak" Andersson.
RabbitMQ 3.4.3
See release notes at http://www.rabbitmq.com/release-notes/README-3.4.3.txt