To add a collaborator to this project you will need to use the Relish gem to add the collaborator via a terminal command. Soon you'll be able to also add collaborators here!
More about adding a collaboratorNacking Redelievered Messages from a consumer
You can configure the consumer to nack a re-delievered message. In this example, we use
a dead letter exchange to show how things end up working.
- Background
-
- Given
-
the following broker configuration
MessageDriver::Broker.define do |b| # declare a dead letter exchange b.destination :rabbit_dlx, "rabbit.dead.letter.exchange", type: :exchange, declare: { type: :fanout } # declare a dead letter queue and bind it to the exchange b.destination :rabbit_dlq, "rabbit.dead.letter.queue", bindings: [ { source: "rabbit.dead.letter.exchange" } ] # declare a work queue that sends dead letters to our dead letter queue b.destination :rabbit_work, "rabbit.work", arguments: { :"x-dead-letter-exchange" => "rabbit.dead.letter.exchange" } end
- And
- I have no messages on :rabbit_work
- And
- I have no messages on :rabbit_dlq
- And
- I have a destination :rabbit_track with no messages on it
- Scenarios
-
- Raising an error in an auto_ack consumer
-
- Given
-
I have a message consumer
MessageDriver::Client.consumer(:manual_redeliver) do |message| publish(:rabbit_track, "#{message.body} Attempt") raise "oh nos!" end
- And
-
I create a subscription
MessageDriver::Client.subscribe(:rabbit_work, :manual_redeliver, ack: :auto, retry_redelivered: false)
- When
-
I send the following messages to :rabbit_work
body Auto Retry 1 Auto Retry 2 - And
- I let the subscription process
- Then
- I expect to find no messages on :rabbit_work
- And
-
I expect to find the following 2 messages on :rabbit_dlq
body Auto Retry 1 Auto Retry 2 - And
-
I expect to find the following 4 messages on :rabbit_track
body Auto Retry 1 Attempt Auto Retry 2 Attempt Auto Retry 1 Attempt Auto Retry 2 Attempt
- Raising an error in a transactional consumer
-
- Given
-
I have a message consumer
@attempts = 0 MessageDriver::Client.consumer(:transactional_redeliver) do |message| publish(:rabbit_track, "#{message.body} Attempt") @attempts += 1 raise "oh nos!" end
- And
-
I create a subscription
MessageDriver::Client.subscribe(:rabbit_work, :transactional_redeliver, ack: :transactional, retry_redelivered: false)
- When
-
I send the following messages to :rabbit_work
body Transactional Redeliver 1 Transactional Redeliver 2 Transactional Redeliver 3 Transactional Redeliver 4 Transactional Redeliver 5 - And
- I let the subscription process
- Then
- I expect to find no messages on :rabbit_track
- Then
- I expect to find no messages on :rabbit_work
- Then
-
I expect the following check to pass
expect(@attempts).to eq(10)
- Then
-
I expect to find the following 5 messages on :rabbit_dlq
body Transactional Redeliver 1 Transactional Redeliver 2 Transactional Redeliver 3 Transactional Redeliver 4 Transactional Redeliver 5
Last published over 7 years ago by soupmatt.