-- | reject
reje :: Envelope -> Args -> IO ()
reje envi a
- | (ack a) = rejectEnv envi (requeuenack a)
+ | (ack a) = delayreject (delaynack a) >> rejectEnv envi (requeuenack a)
| otherwise = return ()
+-- | optionally delay reject
+delayreject :: Int -> IO ()
+delayreject 0 = return ()
+delayreject delay = do
+ printparam "delaying negative acknowledgement for" [(show delay),"s"]
+ threadDelay (delay * 1000000)
+
-- | main loop: sleep forever or wait for an exception
sleepingBeauty :: IO (X.SomeException)
sleepingBeauty =
, moveSentFileTo :: Maybe RawFilePath
, initialScan :: Bool
, streamoffset :: FieldTable
+ , delaynack :: Int
}
instance Default Args where
Nothing
False
(FieldTable M.empty)
+ 0
-- | all options
allOptions :: [(String, OptDescr (Args -> Args))]
(ReqArg (\s o -> o {connect_timeout = read s}) "SECONDS")
("timeout for establishing initial connection (default: " ++
show (connect_timeout def) ++ ")"))
+ , ( "k"
+ , Option
+ ['D']
+ ["delaynack"]
+ (ReqArg (\s o -> o {delaynack = read s}) "SECONDS")
+ ("delay negative acknowledgements (default: " ++
+ show (delaynack def) ++ ")"))
]
-- | Options for the executables
-s INT --heartbeats=INT heartbeat interval (0=disable, default: set by server)
-n NAME --name=NAME connection name, will be shown in RabbitMQ web interface
-w SECONDS --connect_timeout=SECONDS timeout for establishing initial connection (default: 600)
+ -D SECONDS --delaynack=SECONDS delay negative acknowledgements (default: 0)
### EXAMPLES
-s INT --heartbeats=INT heartbeat interval (0=disable, default: set by server)
-n NAME --name=NAME connection name, will be shown in RabbitMQ web interface
-w SECONDS --connect_timeout=SECONDS timeout for establishing initial connection (default: 600)
+ -D SECONDS --delaynack=SECONDS delay negative acknowledgements (default: 0)
<!--
SPDX-FileCopyrightText: 2022 Frank Doepper
printparam "consumer tag" ctag
printparam "send acks" $ ack args
printparam "requeue if rejected" $ (ack args) && (requeuenack args)
+ printparam "delay negative acknowledgements for" $ if delaynack args == 0 then Nothing else Just [(show (delaynack args)),"s"]
+
hr "entering main loop"
sleepingBeauty >>=
(\x -> do