- Better handle in flight frames on io loop termination.
- Prevent
basic_publish
hangs in some rare corner case
- Allow closing Acker and checking if already used
- Close connection to server in case of missing heartbeat
- Dependencies update
- Don't allow trying to close an already closed connection
- Make sure heartbeats are no longer sent after a connection error
- Simplify channels cleanup logic on connection close
- Fix an error when finalizing the connection close duz to missing channel 0.
- Properly cleanup heartbeat sending when connection hit an error.
- Don't call the channel error hook when we get closed with a non error code
- Introduce
Channel::on_error
- Don't propagate the same error twice
- Fix memory leak on connection failure
- Fix potential race condition on connection error
- Fix potential race condition on connection opening
- Update amq-protocol
- Fix some potential hang with rustls
- Update README
- Make most of the API based on async fns
- Update to amq-protocol 7.0
- Reworked connector
- Dropped third-party reactors/executors integration
- New third-party reactors integration through reactor-trait
- New third-party executors integration through executor-trait
- Misc internal cleanups
- Default reactor to async-io
- Switch from log to tracing
- Make most internals use async rust
- Switch to edition 2021
- Default to rustls for TLS handling
basic_publish
no longer takes ownership of the data- Dropped Clone impl where it didn't make sense
- Acker is now public
- Fix potential panic on shutdown
- Fix handling of RabbitMQ replies when they arrive unordered
- Logging updates
- Update to nom 7
- Fix handling of unresponsive servers
- Fix handling of soft errors
- Fix hang in Acker when acking twice (which is invalid)
- Simplify acknowledgements internal handling
- Logging updates
- Logging updates
- Fix an issue with automatic connection close on drop
- Treat close and error as success for consumers cancel as it forcibly implies cancelation
- Cleanup basic cancel handling
- Fix undocumented rabbitmq behaviour on channel close with expected replies
- Better handling of automatic consumer cancelation when connection is closing
- Fix a potential race condition when automatically canceling consumer on drop
- Flush more often onto socket
- Introduce
Connection::topology
to get a serializable representation of the declared queues and consumers - Introduce
Connection::restore
to redeclare the things listed in a Topology - Introduce
Delivery::acker
as a simpler way to ack/nack/reject deliveries Delivery
can be dereferenced asAcker
to directly be able to ack/nack/rejectBasicGetMessage
andBasicReturnMessage
can be dereferenced asDelivery
- Update to amq-protocol 6.0.1
- Port examples to async-global-executor
- Update dependencies
- When converting Consumer to an Iterator, don't cancel it until the Iterator is gone
- When dropping a Consumer, cancel it if it has no delegates
- Fix potential leak due to consumer clone
- When dropping a Channel, wait for all its consumers to be canceled before closing it
- Use proper
non_exhaustive
annotation for error enum
- Update async-task
- Make frame ordering more robust
- Fix a bug in the frame ordering when doing lots of publishing
- Update pinky-swear
- Fix a memory leak in publishers confirm
- Fix an issue when redeclaring a queue
- Improve logging on connection error
- Introduce bastion-amqp to use the bastion executor instead of the default one
- Properly wait for plain stream to be connected on windows
- Update amq-protocol
- Update dependencies
- Add
BasicReturnMessage::error
- Properly handle recycling channels ids when we reached the channel limit
- Fix receiving returned messages from the AMQP server
- Make codegen optional
- update amq-protocol
DefaultExecutor
cleanups
- Introduce tokio-amqp to use the tokio executor instead of the default one
- Introduce async-amqp to use the async-std executor instead of the default one
- Introduce lapinou to use the smol executor instead of the default one
- New default Reactor
- Reactor is now configurable
- Using self-signed certificates is now easie with
connect_with_config
Channel
gets closed once the last reference is droppedConnection
gets closed once the last reference and the lastChannel
are droppedConsumer::tag
gives you access to the consumer's tag
- The auth mechanism is now configured using a query parameter in the AMQPUri
- The executor trait is now made to handle futures. (e.g.
Box::pin(async move {})
) - ConsumerDelegate is now built with futures.
- The number of threads used by the default executor is now configured using
ConnectionProperties::with_default_executor
Connection
no longer implementsClone
Connection::connect
has been reworked to properly handle mid handshake TLS streamsCloseOnDrop
is now goneDeliveryResult
now also carries the correspondingChannel
- Follow the specifications in being stricter about receiving invalid frames
- Don't consider interrupted IO signals as failures
- Threads are correctly cleaned up
- Better Debug implementations
- Internals cleanup
- Use vectored io when applicable
- Error handling fixes
- IoLoop error handling fixes
- Fix a hang with rustls flush
- Fix some edge cases issues with the internal buffer
- Fix some issues with openssl
- Flush socket for rustls
- Work around a bug in mio where we sometimes wouldn't receive a readable notification for the socket
- Fix overflow with high heartbeats
- Properly report connection errors
Connection::on_error
andConsumer::set_delegate
no longer require aBox
Connection::on_error
now accept aFnMut
- Update to pinky-swear 4.0.0
- Don't queue extraneous heartbeats if we cannot write to socket
- Refuse invalid incoming frames
- Don't send heartbeats unless necessary
- Drop the heartbeat thread
- Fix the way we schedule heartbeats to be sent
- Properly put the Conneciton in Error state when we get closed with protocol error
- Don't panic when CloseOnDrop tries to close an already closed Connection
- Use vectored IO when appropriate when writing to socket
- Wait until a frame has been fully sent before notifying sender
- Properly handle Basic.Return when channel is not in confirm mode
- Fix handling of publisher-confirms ack with returned message
- Fix handling of publisher-confirms nack without returned message
Confirmation::Nack
now carries anOption<Box<BasicReturnMessage>>
Confirmation::Ack
now carries anOption<Box<BasicReturnMessage>>
- Prevent a issue when hitting EWOULDBLOCK mid-frame with no other frame queued
Connection
andChannel
can be moved out ofCloseOnDrop
usinginto_inner()
- We now add a marker to promises when trace logging is enabled to make debugging easier
- Update to pinky-swear 3.0.0 (properly handle chaining result promises)
Confirmation
can no longer hold an errorPublisherConfirm
now returns a properResult<Confirmation>
- Connecting now returns a
CloseOnDrop<Connection>
- Creating a channel now returns a
CloseOnDrop<Channel>
PinkySwear
is now hidden from the public API
- Add a new CloseOnDrop wrapper for automatically closing Connection or Channel when dropped.
- Properly send errors to publisher confirms awaiters on channel close
- Properly forward errors to publisher confirms awaiters
- Track the frame-sending promise before the response one for syncrhonous methods
- The bugfix induces some changes in the return values of some method. Shouldn't change anything.
- Properly report error in one internal place
- Update pinky-swear to 2.1.0 to avoid any sync op on main thread
- Update to pinky-swear 2.0.0 (shoudln't change much)
- Publisher Confirms integration has been reworked:
basic_publish
now gives you aPinkySwear<Result<PublisherConfirm>>
- If you didn't enable publisher confirms using
confirm_select
, you can ignore it - If you drop the
PublisherConfirm
it will behave as before and you'll need to callwait_for_confirms
- You can use the
PublisherConfirm
to wait for this particularConfirmation
(Ack
/Nack(BasicReturnMEssage)
)
- Detect errors in some edge scenarii
- Fix a bug when receiving basic-return before basic-nack
- The
Connect
trait has been simplified - The
futures
feature doesn't exist anymore (always enabled) - The
lapin-futures
(0.1 futures compat) has been dropped
- Examples ported to async/await
- Fix nom dependency
- Fix hang on macos
- Some more Error reworks
- Port to amq-protocol 5.0 and mio 0.7
- Deprecate lapin-futures
- Prevent lapin-futures from eating memory when eagerly polled
- Followup to 0.32.3 for consumers in lapin-futures
- Fix waking up context when a future gets sent to another one
- Fix race condition in
Channel::close
- Fix Channel and Connection status in some cases
- Properly handle critical error when reading from socket on first connection
Error::ConnectionRefused
is replaced by the proper underlying ProtocolError or IOError
DefaultExecutor::default()
is now public
- Receiving consumer or basic get deliveries on queue we didn't declare now works properly
Channel::basic_consume
now takes an&str
instead of a&Queue
as its first parameter
impl From<_> for AMQPValue
- New rustls-native-certs feature
- Error enum has been cleaned up
- ErrorHandler now takes the Error as a param
- Better error handling and forwarding
- Fix PartialEq for Error
- Ensure we properly write everything when we need to split contents
- Switch the return types to
pinky-swear
(the API remains mostly the same)
- Error is now Clonable
- Better error handling and bubbling in lots of cases
- Properly handle soft errors
- Fix some error handling in consumers
- Export ConsumerIterator
- Update dependencies
- Fix some race conditions in the publisher confirms implementation
Channel::exchange_declare
now takes anExchangeKind
parameter instead of an&str
- Update dependencies
- Warn on unused
Confirmation
- Avoid Mutex around consumer delegate to enable proper multithreading
- Updated amq-protocol to 3.0.0
Channel::connection_[,un}blocked
is nowConnection::{,un}block
failure
as been replaced withstd::error::Error
usageConfirmation::as_error
has been removed- Consumers API has been cleaned up, everything is now a
DeliveryResult
IoLoop::run
is nowIoLoop::start
- Add support for
update_secret
for oauth2 authentication module - Add support for TLS "identity" (client certificate)
- Consumer can now be used as an
Iterator<Item = Delivery>
Consumer::set_delegate
now accepts a closure parameter- Add
lapin::Result
- Update amq-protocol to fix amqps handling
- Fix error handling during early connection stage
- Properly forward errors to consumer delegates
IoLoop
fixes under heavy loads
IoLoop
fixes under heavy loads
- Make
Connection::connector
andIoLoop:run
public
- Better handle multiple channel publishing under heavy load
- Fix retrying of
basic_publish
frames
- Rework how
basic_publish
is handled internally to ensure concurrent usages work as expected
- Do not hang on tasks that require an answer in case of channel error
- Fixes some frames ordering when using concurrent
basic_publish
under heavy load
- Properly broadcast channel error to all pending tasks/futures
- Fix unblocking connection
- Properly broadcast connection error to all pending tasks/futures
- Unused IoLoopError has been dropped
- Consumer streams now properly forward connection errors
- lapin's consumer stream now returns a Result
ConsumerDelegate
now has aon_error
hook
- Properly handle network disconnections on OSX
Connection::close
no longer hangsConsumerDelegate
no longer requiresfmt::Debug
ConsumerDelegate
methods have been renamed for clarity and onlyon_new_delivery
is now mandatory
lapin-async
as been renamed tolapin
- lapin: Instead of passing a
Box<dyn ConsumerSubscriber>
as a parameter tobasic_consume
, you must now callset_delegate(Box<dyn ConsumerDelegate>)
on the returnedConsumer
lapin
has experimental support forfutures-0.3
+std::future::Future
through itsfutures
feature
- you can now select the TLS implementation used for amqps or disable amqps support
- vhosts are properly handled again
- we now properly wait for the return message when last ack is a nack for publishers confirm
wait_for_confirms()
is now async (needs to be awaited)
- More work around connection failures, properly report those as errors
- Add a way to register a connection error handler
- Properly handle connection failures
- async
Connection::run
to keep the program running when there is nothing left to downgraded but consume new messages
io_loop
correctly exists once connection is no longer connected
- Some internal methods are no longer public (channel and connection handling)
- Rework how we close channels and connection
- Drop duplicate Credentials param from connect, use the credentials from the AMQPUri.
- All of AMQP methods and auth mechanisms are now supported
- Better consumers handling
- Misc code cleanup and modernization
- AMQP is now fully supported, no more crahs on unexpected frames
- Method options are now generated. Hardcoded fields from AMQP omitted. Options are shared between async and futures
- The way we handle
publisher_confirm
has changed. You now need to callconfirm_select
explicitly, and thenwait_for_confirms
to wait for all pending confirmations - async
- Methods are now on the
Channel
object which is now returned instead ofchannel_id
bycreate_channel
- Methods are now generated from protocol specifications
- Methods return a Confirmation that can be awaited
- ShortString and LongString are now concrete types (!= String), which can be created from &str or String using
into()
- Connection::connect has been rewritten
- Methods are now on the
- futures
- Port to the new lapin-async
- Client::connect has been rewritten
- Better
delivery_tag
handling - Adapt our behaviour wrt ack/nack to be specifications-compliant
- We now pass several additional information to the server when connecting, such as capabilities
- Connect now takes an additional
ConnectionProperties
for better configuration
- Better logging when channel gets closed by server
- Support receiving BasicCancel from the server
- Drop prefetched messages when specific arguments are passed to
basic_{,n}ack
orbasic_cancel
- Drop sasl dependency, avoiding linkage to LGPL-3 licensed code
- Switch to edition 2018
- Switch to
parking_lot
Mutex
- futures
- Drop now unused mutex poisoning error
- Update
amq-protocol
- async:
- Introduce a new
Error
type, replacing occurrences ofio::Error
in public APIs (#145)
- Introduce a new
- futures:
- Introduce a new
Error
type, replacing occurrences ofio::Error
in public APIs (#145)
- Introduce a new
- Update
env_logger
- Drop unused
build.rs
from async
- Fix heartbeat interval
- Update amq-protocol dependency
- Reexport
amq_protocol::uri
- futures:
basic_ack
andbasic_nack
API now support passing themultiple
flag- Port to the new
tokio-codec
crate - The object returned by
queue_declare
now holds the messages count and the consumers count too
- Fully rework how consumers are handled internally, should be way more robust now
- Heartbeats are now preemptive and are successfully sent even under heavy load
- Port to
nom
4 - async: some fields got their visibility downgraded to private as part of the consumers rework
- futures:
- We now use
impl trait
and thus require rust 1.26.0 or greater basic_publish
payload is now aVec<u8>
- We now use
- Implement
channel_close_ok
- Slightly rework consumers internal handling
- futures:
- Allow cancelling the Heartbeat future
- Implement flow methods
- Fix bad expectation for empty payloads
- Fix heartbeat when configured value is 0
- Fix channel overflow when
channel_max
is low - futures:
- Ensure tasks aren't dropped when we hit
Async::NotReady
but queued for re-poll instead - Correctly handle mutex poisoning
- Use generated consumer tag and queue name when an empty one is provided
- Fix
Sink
implementation onAMQPTransport
- Ensure tasks aren't dropped when we hit
- futures:
- Port to
tokio
- Update to
tokio-timer
0.2 queue_declare
now return aQueue
objectbasic_consume
now expects aQueue
object to ensure you've calledqueue_declare first
- Port to
- futures: Get back to
tokio-timer
0.1
- implement
basic_qos
- futures:
- Implement
basic_nack
- Implement
queue_unbind
- Mark all futures as
Send
to easetokio
integration
- Implement
- futures: Get back to
tokio-timer
0.1
Message
is nowDelivery
, differentiate fromBasicGetMessage
- futures:
- Port to
tokio-timer
0.2 - Prefer
handle.spawn
tothread::new
for the heartbeat
- Port to
- Rework how the futures API is handled internally
- Rework client-server parameters negotiation at connection
- futures:
create_confirm_channel
now take aConfirmSelectOptions
- Run heartbeat in a separated thread (delegate thread creation to user)
- Return a heartbeat creation closure alongside the client
- Implement
access
methods - async:
- Make errors more specific
- Do the
frame_max
negotiation with the server
- futures:
- Implement missing exchange methods
- futures: Rework the
basic_publish
API
- Update
amq-protocol
- Better error handling
- futures: Implement
Channel::close
- Polling improvements
- Better error handling
- Implement
exchange_declare
- futures:
- Implement
queue_bind
- Implement
queue_delete
- Implement
- Allow choosing the vhost
- Update
sasl
to 0.4 (removes theopenssl
dependency)
- Implement
confirm_select
- async:
- Add support for BasicProperties
- Implement
receive_basic_ack
- Implement
receive_basic_nack
- futures:
- Implement confirm channel
- Implement heartbeat
- Chunking of message bodies
- futures: Add options for API methods missing them
- Initial release