All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Allow large client frame sizes, but split body frames to client if smaller than upstream frame size, to support large Header frames
- Send all GetOk response frames in one TCP packet
- Bugfix: Send Connection.Close-ok to client before closing TCP socket
- Bugfix: Pass Channel.Close-ok down to client
- Bugfix: negotiate frame_max 4096 for downstream clients
- Bufix: Only send channel.close once, and gracefully wait for closeok
- Buffer publish frames and only send full publishes as RabbitMQ doesn't support channel.close in the middle of a publish frame sequence
- Optimization: only flush socket buffer after a full publish sequence, not for each frame
- Never reuse channels, even publish only channels are not safe if not all publish frames for a message was sent before the client disconnected
- Don't log normal client disconnect errors
- Don't allow busy connection to dominate, Fiber.yield every 4k msgs
- --term-timout support, wait X seconds after signal TERM and then forefully close remaining connections
- Always negotate 4096 frame_max size, as that's the minimum all clients support
- Heartbeat support on the client side
- Connection::Blocked frames are passed to clients
- On channel errors correctly pass closeok to upstream server
- Rewrite of the proxy where Channels are pooled rather than connections. When a client opens a channel it will get a channel on a shared upstream connection, the proxy will remap the channel numbers between the two. Many client connections can therefor share a single upstream connection. Upside is that way fewer connections are needed to the upstream server, downside is that if there's a misbehaving client, for which the server closes the connection, all channels for other clients on that shared connection will also be closed.
- Nothing changed from v0.8.14
- Update current client in
Upstream#read_loop
#138
- Disconnect clients on broken upstream connection #128
No changes from 0.8.11. Tagged to build missing Debian/Ubuntu packages.
No changes from 0.8.10.
No changes from 0.8.9.
-
Alpine Docker image now uses user/group
amqpproxy
(1000:1000) #107 -
Require updated amq-protocol version that fixes tune negotiation issue
- Same as 0.8.7 but fixes missing PCRE2 dependency in the
cloudamqp/amqproxy
Docker Hub image
- Disables the Nagle algorithm on the upstream socket as well (#113)
- Added error handling for IO error (#104)
- Reenable TCP nodelay on the server connection, impacted performance
- 0.8.3 was tagged 2023-02-15 but a proper release was never created (release workflow failed)
- 0.8.4 was tagged (and released) 2023-03-01 but it was built without bumping the version, so it reports 0.8.3
- 0.8.5 was tagged 2023-03-01 but a proper release was never created (release workflow did not run)
- Build RPM packages for Fedora 37
- Build DEB packages for Ubuntu 22.04
- Locks around socket writes
- Default systemd service file uses /etc/amqproxy.ini
- Set a connection name on upstream connections
- New amq-protocol.cr without a StringPool, which in many cases caused a memory leak
- Prevent race conditions by using more locks
- Don't disable nagles algorithm (TCP no delay), connections are faster with the algorithm enabled
- idle_connection_timeout can be specificed as an environment variable
- Container image uses libssl1.1 (from libssl3 which isn't fully supported)
- Inform clients of product and version via Start frame
- Check upstream connection before lending it out
- Graceful shutdown, waiting for connections to close
- Don't try to reuse channels closed by server for new connections
- Notify upstream that consumer cancellation is supported
- Reuse a single TLS context for all upstream TLS connections, saves memory
- Fixed broken OpenSSL in the Docker image
- Build package for Debian 11 (bullseye) (#73)
- Bump dependencies
- Fix bug with connection pool shrinking (#70)
- Support for config files (#64)
This version never got built.
- Same as 0.5.10, only to test release automation
- Include error cause in upstream error log (#67)
- TLS cert verification works for container images again
- Don't parse timestamp value, it can be anyting
- Docker image for arm64
- dockerfile syntax error
- --idle-connection-timeout option, for how long an idle connection the pool will stay open
- Wait at least 5s before closing an upstream connection
- Close client socket on write error
- Close Upstreadm socket if client disconnects while deliverying body as state is then unknown
- Skip body io if no client to deliver to
- Better client disconnect handling
- Name all fibers for better debugging
- Not stripping binaries in Dockerfile
- Crystal 1.0.0
- Heartbeat support for upstreams, uses the server suggest heartbeat interval
- Improved connection closed handling