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.
5.1.1 - 2022-09-09
- Made
google-protobuf
dependency explicit
5.0.0 - 2021-02-17
- Message encoders. Messages can now be encoded using either binary protobufs (the default) or JSON protobufs.
RailwayIpc::OutgoingMessage
abstraction that encapsulates everything about a message to be published.
Publisher#publish
now takes an optionalformat
parameter that specifies how the message should be encoded. It is added to the message header when the message is published. The default format isbinary_protobuf
.- (Breaking change)
Publisher#publish
now returns anOutgoingMessage
instead of aBunny::Exchange
. - Refactor
PublishedMessage#store_message
to take anOutgoingMessage
.
- (Breaking change) Remove deprecated
SingletonPublisher
4.0.1 - 2021-01-12
- Fixed
undefined method fetch for Bunny::MessageProperties
error.Bunny::MessageProperties
isn't really a Hash, it wraps one (and doesn't provide a#fetch
method).
4.0.0 - 2021-01-11
- JSON decoder for consumers that can handle JSON encoded Protobufs. Note that the publishers do not (yet) have the option of encoding the messages as JSON.
- (Breaking Change) Rename
Consumer#work
toConsumer#work_with_params
. This was necessary so that we can support specifying different message encodings via metadata in the future. If the message encoding cannot be determined from the message metadata fall back to a default decoder (binary protobufs).
./bin/console
script was broken because Pry wasn't a dependency; added Pry as a development dependency only.
3.0.0 - 2020-12-07
- Consumers will no longer crash when an exception is raised. Instead, consumers will move the message that caused the exception to a single dead-letter exchange called 'ipc:errors'. Railway will configure the dead-letter exchange automatically.
2.2.2 - 2020-11-20
- Fixed Publisher class channel leak. Channels were being created on each instantiation of a Publisher instead of being re-used.
2.2.1 - 2020-10-20
- Logging to indicate when options passed via
listen_to
/from_queue
are overriding the defaults.
2.2.0 - 2020-10-20
- The ability to configure workers to handle different workloads via
rake railway_ipc::consumers:spawn
2.1.0 - 2020-10-19
- :options parameter to
listen_to
which passes keys along to Sneaker'sfrom_queue
method.
2.0.3 - 2020-09-02
- Fix RPC server. RPC servers need to conform to the Sneaker worker API (i.e. their initializers need to be able to accept queue name / pool and they require a
stop
method.
2.0.2 - 2020-08-27
- RPC
RailwayIpc::Client
does not need to log the queue name.
2.0.1 - 2020-08-24
RailwayIpc::Logger
now handles block syntax (i.e.logger.info { 'my message' }
) correctly.
2.0.0 - 2020-08-20
- Several additions to internal logging:
- Log messages now include a
feature
key. This can be used by logging aggregator tools to group log messages across different systems that use the gem. If one isn't provided a default value ofrailway_ipc
is used. - Protobufs are logged as a sub-hash which contains both the protobuf type and payload.
- Exchange and queue names are logged where applicable.
- The internal Bunny connection now uses the
RailwayIpc::Logger
instead of a genericLogger
.
- Log messages now include a
- Breaking Change
RailwayIpc.configure
now takesdevice
,level
, andformatter
instead of a completeLogger
instance. The instance is now managed internally by Railway. This is a breaking change to theRailwayIpc.configure
API, clients will need to be updated to use the new syntax.
1.1.0 - 2020-08-07
- allow multiple consumers to handle the same message
- consumed messages table requires its own primary key due to ActiveRecord not having support for composite primary keys
1.0.1 - 2020-07-23
- Fix publisher connection by using default connection if one isn't provided
1.0.0 - 2020-07-20
- CircleCI build that runs the specs
- Rubocop (also ran by CircleCI)
- New error types for incoming messages
- RailwayIpc::Messages::Unknown protobuf
- Refactored worker to use ProcessIncomingMessage and IncomingMessage abstractions
- Moved decoding logic from ConsumedMessage to IncomingMessage
- Removed STATUSES constant from ConsumedMessage
- Publisher is no longer a Singleton; kept a Singleton version of the Publisher for backwards compatibility that gives a "deprecated" warning
- Removed
BaseMessage
protobuf - NullMessage and NullHandler were removed
- Fixed all Rubocop warnings and errors
0.1.7 - 2020-06-29
- Correlation ID and message UUID are auto generated for messages for IDs are not passed in #23