Revision history for Net-Async-AMQP

2.000     2016-12-27 20:44:32+08:00 Asia/Kuala_Lumpur
	* RPC server/client implementation, should be compatible with
	* Connection blocked support
	* Custom headers and delivery mode
	* Correlation and reply_to fields are available in ->publish and also passed to
	the consumer via the {properties} information

1.000     2015-09-14 02:21:19+01:00 Europe/London
	API changes: The close events now use 'code' and 'reason' more consistently - previously the
	code had reply_code / message in some places. This may affect any "close" event
	handlers in existing code (for channels or connections).

	* Queue declare now resolves with number of messages and consumers as well
	as the queue instance.
	* Futures are now labelled for easier tracing
	* amqp_frame_info() provides more information on known frame types
	* Net::Async::AMQP::Queue now has a ->consumer wrapper, which is slightly more
	userfriendly than the ->listen method.

	Bugs fixed:
	* Various connection handling issues when client/server close a channel or the
	entire connection.

	Also updated the list of alternative AMQP implementations.

	This version has only been tested up to 80k channels across 80 connections, with a pair
	of consumer and publisher for each of those channels - so although it should be possible
	to run with more active channels, given sufficient memory/CPU, that's as far as this version
	has been tested.

0.031     2015-08-20 02:50:43+01:00 Europe/London
	* Support more options when publishing messages (including message
	expiration, thanks to Naveen Nathan for the patch)
	* ->unbind_exchange method

	Bugs fixed:
	* Don't send a CloseOk frame if we were the ones closing the channel.
	* More cleanup in Net::Async::ConnectionManager when channels and/or connections
	are closed.

0.030     2015-05-01 19:29:16+01:00 Europe/London
	* Support more options when publishing messages (including message
	expiration, thanks to Naveen Nathan for the patch)

0.029     2015-04-20 01:11:17+01:00 Europe/London
	* Helper functions in Net::Async::AMQP::Utils for converting status codes
	to message/description

	Bugs fixed:
	* On connection close, do a better job of cleaning up, and include a test
	to verify that we can dispose the Net::Async::AMQP instance after loop removal
	(thanks to snappy for reporting + providing a test case for tracing).

0.028     2015-04-15 23:31:34+01:00 Europe/London
	* Supports messages which have been split into multiple frames - currently
	there's no streaming support, but this should now handle arbitrarily-large
	messages as long as you have the memory available.

	Bugs fixed:
	* Better channel close detection and handling - we now also record when
	a ::Channel instance has been closed, so we know to report an error if any
	further requests are attempted.

	Internal API changes:
	* ->send_frame on Net::Async::AMQP and Net::Async::AMQP::Channel now return
	a Future instead of $self, since parts of the code need to know when we've
	attempted to send the frame.

0.027     2015-03-22 15:11:03+00:00 Europe/London
	No new features.

	Test fixes:
	* fixed typo in t/conman-memory.t

0.026     2015-03-17 16:57:07+00:00 Europe/London
	No new features.

	Bugs fixed:
	* Connections are removed from the full list when closed by the server

	Test fixes:
	* Test::MemoryGrowth is currently Linux-only, so make it optional (RT102681)

0.025     2015-02-04 17:05:39+00:00 Europe/London
	No new features.

	Bugs fixed:
	* ConnectionManager updated to use List::UtilsBy::extract_by, not
	Scalar::Utils::extract_by, since the former has the advantage of actually
	being a real thing.

0.024     2015-02-04 14:26:38+00:00 Europe/London
	No new features.

	Bugs fixed:
	* In some cases would raise an exception due to attempting to unsubscribe
	from an event that had already been unsubscribed (close, for example).

0.023     2015-01-23 12:34:48+00:00 Europe/London
	New features:
	* Proper timeout/retry support in ::ConnectionManager

0.022     2015-01-20 11:00:03+00:00 Europe/London
	New features:
	* SSL support, pass ssl => 1 in $amqp->connect

0.021     2015-01-06 12:18:20+00:00 Europe/London
	API CHANGES: The undocumented Queue methods now all take a channel
	parameter, so that we don't retain a channel on the queue instance.
	This is unlikely to change again before 1.0 so the methods are now
	documented. Queues are no longer notifier subclasses.

	Bugs fixed:
	* Memory leak due to ::Queue instances being held by the loop, and
	channels being retained by the queue instances (caught by
	Test::MemoryGrowth, analysed by Devel::MAT, a handy pair of tools

0.020     2015-01-05 12:54:17+00:00 Europe/London
	No new features.

	Bugs fixed:
	* Don't call ->on_ready on a Future that's already been cleaned up,
	and handle cases where the Future is passed to ->closure_protection
	in a ready state

0.019     2014-12-30 11:47:16+00:00 Europe/London
	No new features.

	Test fixes:
	* conman-channels.t was attempting to load a specific IO::Async::Loop
	subclass, causing dependency failures.

0.018     2014-12-28 17:41:10+00:00 Europe/London
	Same code as previous version, this time with updated Changes file.

0.017     2014-12-28 17:31:35+00:00 Europe/London
	API CHANGES: The ->write method on Net::Async::AMQP::Channel was
	not used by anything in this code, and has been dropped. You
	probably shouldn't call ->write directly on Net::Async::AMQP either.

	New features:
	* Reports frames sent/received when IO_ASYNC_DEBUG is enabled
	* Methods on Net::Async::AMQP::Queue now hold on to the Future
	instances, bringing this in line with other classes - this means
	methods such as $queue->delete in void context no longer raise
	warnings about ->then in void context

	Bugs fixed:
	* Various issues around reopening channels now resolved, in particular
	earlier versions were likely to report a "second" error
	(tested with RabbitMQ only so far)
	* Hardcoded "warn" removed

0.016     2014-12-26 13:10:19+00:00 Europe/London
	No new features.

	Bugs fixed:
	* Test::HexString test dependency was not declared

0.015     2014-12-26 07:02:06+00:00 Europe/London
	New features:
	* Support exchange-to-exchange binding (RabbitMQ-specific feature)

	Bugs fixed:
	* Header frames have no ->method_frame, amqp_frame_type in was not handling
	them correctly
	* Heartbeat failure now uses the ->close method rather than just sending a close
	frame, for consistency with other close handling

0.014     2014-12-25 14:31:23+00:00 Europe/London
	New features:
	* Support max_channels in connection manager
	* When requesting a channel, attempt a new connection if all existing connections
	are full (was only partially implemented previously)

0.013     2014-12-25 11:33:37+00:00 Europe/London
	This release raises the minimum Perl version requirement to 5.14,
	for the ${^GLOBAL_PHASE} variable.

	New features:
	* Support reusing closed channel IDs by default in Net::Async::AMQP
	* Remove connection from available pool when no channels are available
	* Hardcoded connection manager channel assignment retry count moved
	to a method so that it's easier to override if required
	* Server implementation now supports channel opening (still a long way
	from a usable server)

	Bugs fixed:
	* Prevent ->confirm_mode on an existing ConnectionManager channel
	* Call cleanup tasks when releasing a managed channel

0.012     2014-12-11 11:04:10+00:00 Europe/London
	No new features.

	Bugs fixed:
	* Heartbeat handling overhaul - the send/receive heartbeat timers are independent,
	so we can now pick up heartbeat failure when we're not actively sending.
	* Fixes for channel/connection close handling - all Futures representing channel activities
	will now be marked as failed on channel closure
	* Default values for user+password (guest/guest) are now applied - this avoids the following
	RabbitMQ error:
	 "AMQPLAIN auth info [{<<76,79,71,73,78>>,void,undefined},{<<80,65,83,83,87,79,82,68>>,void,undefined}]
	 is missing LOGIN or PASSWORD field"

	Internal changes:
	* Timers and stream are now children of the top-level Net::Async::AMQP object
	rather than attached directly to the loop

0.011     2014-12-03 13:20:39+00:00 Europe/London
	New features:
	* Pass Basic.CancelOk notifications through as a cancel event:
	 $ch->bus->subscribe_to_event(cancel => sub { my ($ev, $ctag) = @_; warn "cancel ctag $ctag" });
	Needs the client property set for RabbitMQ to start sending these
	messages -
     client_properties => {
      capabilities => {
       consumer_cancel_notify => Net::AMQP::Value->true,
	in ->connect() or ConnectionManager->add()

	Bugs fixed:
	* Header and body frame type detection fixed
	* Outgoing heartbeat timer reset on expiry

0.010     2014-12-02 10:14:25+00:00 Europe/London
	New features:
	* Support for passing heartbeat as a server parameter when calling
	->add() on a Net::Async::AMQP::ConnectionManager.

0.009     2014-12-01 14:41:04+00:00 Europe/London
	No new features.

	Bugs fixed:
	* No longer attempts to call ->frame_method on heartbeat frames

0.008     2014-08-30 00:33:42+01:00 Europe/London
	New features:
	* Debugging uses ->debug_printf() everywhere, and is controlled by the
	standard IO_ASYNC_DEBUG env var
	* Basic server implementation, still not usable but clients can at least
	connect now
	* All channel frames are now handled by the relevant ::Channel instance,
	should provide slightly better performance and less chance for things
	to go out of sync

	Bugs fixed:
	* Expect publish ACK even when we get a NO_ROUTE response 
	* Explicit string type enforced on all queue/exchange/routing key/ctag
	fields, to allow numeric-looking values - a precaution against issues like
	* Avoid excessive warnings in global destruction when the
	Net::Async::AMQP::ConnectionManager objects go out of scope.

0.007     2014-08-27 03:27:09+01:00 Europe/London
	No new features.

	Bugs fixed:
	* Channel traffic is independent. As such, the global pending frame handling
	was broken: instead, we now track pending frames on a per-channel basis.
	* Cancelling a ->listen request between the Consume.Start and Consume.Ok frames
	meant that you'd end up with an active listener - we now explicitly cancel this
	listener when the Consume.Ok frame turns up.
	* Connection manager now applies the managed channel to queue objects
	* Unnecessary extra connections were being opened, this has been fixed.

0.006     2014-08-25 18:01:14+01:00 Europe/London
	No new features.

	Bugs fixed:
	* Handle channel close correctly
	* Pass type information from messages - previously we were using the 'type' header

0.005     2014-08-18 05:11:08+01:00 Europe/London
	No new featues.

	Tests fixed:
	* Don't try to connect to a 'default' AMQP server,
	skip if env vars were not provided

0.004     2014-08-17 18:40:45+01:00 Europe/London
	* The Net::Async::AMQP class is now an IO::Async::Notifier, to bring it in line with
	other IO::Aync code. One side effect of this change is that events are now raised through
	a message bus rather than directly on the Net::Async::AMQP instance itself.

	Existing code will need to change this:

	 my $amqp = Net::Async::AMQP->new(loop => $loop);

	to this:

	 $loop->add->(my $amqp = Net::Async::AMQP->new);

	and this:


	to this:


	New features:
	* Connection manager for automatically connecting and assigning channels
	* Some loadtesting scripts, for performance+stability testing on the server
	implementation (not available yet, should be in the next release)

	Bugs fixed:
	* If we establish TCP connection but fail to negotiate auth with server,
	previously this would leave the connection future unresolved. It will now
	fail with a message indicating that the remote closed the connection.
	* Net::AMQP was generating an invalid initial connection header
	(AMQP\x01\x01$major$minor rather than AMQP\x00$major$minor$rev as the
	AMQP 0.9.1 spec seems to require), we now generate our own header.
	RabbitMQ seems happy with either.

0.003     2014-02-27 07:56:25+00:00 Europe/London
	Bugs fixed:
	* Connection close sends a real connection close, rather than a channel close request

0.002     2014-02-27 07:10:14+00:00 Europe/London
	New features:
	* Support parameters when declaring queues (passive, durable, exclusive)

0.001     2014-01-05 04:52:26 Europe/London
	Initial CPAN release