diff --git a/CHANGELOG.md b/CHANGELOG.md index 747247f..23709a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## 1.4.0 (in development) +## 1.4.0 (Apr 6, 2026) ### Ruby 3.0 is Now Required @@ -39,6 +39,13 @@ GitHub issue: [#414](https://github.com/ruby-amqp/hutch/pull/414) ### Migrated Datadog Tracer From the `ddtrace` Gem to `datadog` The Datadog tracer now uses the `datadog` gem instead of the deprecated `ddtrace`. +The `ddtrace` gem is still supported but emits a deprecation warning at load time. +Support for `ddtrace` will be removed in Hutch 2.0. + +### Deprecated `SentryRaven` Error Handler + +`Hutch::ErrorHandlers::SentryRaven` now emits a deprecation warning and will be +removed in Hutch 2.0. Use `Hutch::ErrorHandlers::Sentry` (backed by `sentry-ruby`) instead. ### Rails 8.x Compatibility diff --git a/lib/hutch/error_handlers/sentry_raven.rb b/lib/hutch/error_handlers/sentry_raven.rb index 953d89c..5aad39b 100644 --- a/lib/hutch/error_handlers/sentry_raven.rb +++ b/lib/hutch/error_handlers/sentry_raven.rb @@ -10,6 +10,9 @@ def initialize unless Raven.respond_to?(:capture_exception) raise "The Hutch Sentry error handler requires Raven >= 0.4.0" end + + warn "[DEPRECATION] Hutch::ErrorHandlers::SentryRaven is deprecated and will be removed in Hutch 2.0. " \ + "Use Hutch::ErrorHandlers::Sentry (backed by the sentry-ruby gem) instead." \ end def handle(properties, payload, consumer, ex) diff --git a/lib/hutch/tracers/datadog.rb b/lib/hutch/tracers/datadog.rb index fad07f8..c24e220 100644 --- a/lib/hutch/tracers/datadog.rb +++ b/lib/hutch/tracers/datadog.rb @@ -1,9 +1,11 @@ begin - require 'ddtrace' - require 'ddtrace/auto_instrument' -rescue LoadError require 'datadog' require 'datadog/auto_instrument' +rescue LoadError + require 'ddtrace' + require 'ddtrace/auto_instrument' + warn "[DEPRECATION] The ddtrace gem is deprecated and Hutch will require the datadog gem in 2.0. " \ + "Please switch to the datadog gem." end module Hutch diff --git a/spec/integration/publish_consume_spec.rb b/spec/integration/publish_consume_spec.rb new file mode 100644 index 0000000..cb7d71a --- /dev/null +++ b/spec/integration/publish_consume_spec.rb @@ -0,0 +1,48 @@ +require 'spec_helper' +require 'hutch/broker' +require 'hutch/worker' +require 'hutch/consumer' +require 'securerandom' +require 'timeout' + +describe 'publishing and consuming messages', rabbitmq: true, adapter: :bunny do + let(:exchange_name) { "hutch.test.#{SecureRandom.hex(4)}" } + let(:routing_key) { "test.message" } + let(:received) { [] } + + let(:consumer_class) do + msgs = received + rk = routing_key + qn = "test_consumer_#{SecureRandom.hex(4)}" + + Class.new do + include Hutch::Consumer + consume rk + queue_name qn + + define_method(:process) { |message| msgs << message.body } + end + end + + let(:broker) { Hutch::Broker.new } + let(:worker) { Hutch::Worker.new(broker, [consumer_class], []) } + + before do + Hutch::Config.set(:mq_exchange, exchange_name) + end + + after do + broker.disconnect rescue nil + end + + it 'publishes and consumes a message' do + broker.connect + worker.setup_queues + + broker.publish(routing_key, { test: 'data' }) + + Timeout.timeout(5) { sleep 0.1 until received.any? } + + expect(received.first).to eq('test' => 'data') + end +end