- Perform retries connecting to RabbitMQ only if Harmoniser runs as the main process
- Change from IO.pipe to Thread::Queue so that an OS signal is exchanged through a queue safely.
- Attach callbacks for block/unblock at Connection
- Introduce Connectable to accommodate Session/Channel management
- Attach at_exit hook for maybe closing Publisher connection. Only applicable for cases in which harmoniser is not the process running.
- Separate connection for Publisher, Subscriber and Topology as per recommendations from RabbitMQ official docs
- Add a concurrency option to the CLI. By default, concurrency is unbounded, i.e., each subscriber has its own thread dedicated to processing messages
- Introduce Harmoniser::Subscriber::Registry for holding references to classes that include Harmoniser::Subscriber
- Kill the process when an ACK timeout is received through any channel. The process terminates with exit code 138
- Add a 25-second timeout to shut down the process. This is only applicable to processes using the concurrency option
- Update Bunny to the latest version, i.e., 2.23
- Cancel subscribers and connection is done within the Launcher context instead of relying on at_exit hook
- Prevent the connection from being closed after Topology#declare finishes; only the channel used is closed
- Add debug log when a message is received by a subscriber
- Add error_class, error_message and error_backtrace for
--require
option from cli
- Amend debug log when a message is published so that exchange name is included
- Improve error message for MissingExchangeDefinition and MissingConsumerDefinition
- Define dev dependencies through Gemfile instead of gemspec
- Changed Topology methods to return self so that Topology definition becomes chainable
- Exit ruby process when harmoniser is not the main process. More details at issue.
- Implement retry mechanism to establish connection to RabbitMQ. More details at issue.
- Strengthen at_exit hook to not break when connection cannot be closed.
- Add a default on_return callback for Publisher. When a message marked as mandatory is published and cannot be routed to any queue, a detailed log is output.
- Improve README to highlight Harmoniser golden features
- Shorten the gemspec summary
- Delete docs folder since github wiki is the way to document the library.
- Delete .travis.yml since we no longer use for CI/CD integration.
- Create a channel for each class including Harmoniser::Publisher or Harmoniser::Subscriber. A mutex in the context of the class including Publisher or Subscriber modules control access to the resources created as well as guarantees safe publication under multi-thread process.
- Introduce broadcast and unicast examples.
- Amend specs to wipe out RabbitMQ resources created during spec execution.
- Honour verbose option regardless of the environment configuration set. For instance, for non-production environment, verbose is no longer verbose set by default.
- Setup at_exit hook to be executed when Harmoniser exits for an opened RabbitMQ connection
- Add defaults to Bunny::Session for timeouts and recovery attempts
- Fix boot up problems for payments application example
- Perform refactoring of internals such as slimming down Configuration
- Default logger with error severity for when errors occur at channel level
- Default logger with error severity for when errors occur while processing a message from a queue
- Unused docker image for rabbitMQ (only for development purposes)
- Introduce github action for building, linting and running specs anytime a pull request is opened or push to master happens
- Introduce github action for releasing the gem once is merged into master
- Support to express publishing through any kind of exchanges
- Capability to subscribe to queues
- Express RabbitMQ topology separated from the responsibility of publishing or subscribing
- Provide dedicated Ruby process to consume messages through the subscribers defined