Current:
slacker manager will subscribe a subscription under google topic
send a ack message to google pubsub after process the message successfully
send a nack message to google pubsub if got an exception, google will resend the same message again to slacker once it received the nack message. this will repeat unlimited times.
if the network breaks or the message exceed the deadline expiration time , it will keep staying in message queue and never resend
Future
don’t need to implement any retry feature anymore
send ack/nack to google pub
if network break or message exceed deadline expire time, the message will move to dlq topics
Enable DLQ message in Google topic
turn on the dlq features in google Pub/Sub, then the message will move to dlq topic once it exceed the deadline expire time
Keep error information in message
the google pub/sub messages can’t be updated once it published, so in this scenario, we need to clone message from original and add error log information in the clone message and send it to DLQ topic
Pseudo-code
fun onMessage(message: PubsubMessage, acknowledgement: Acknowledgement) { val atttempt_count = message.attributesMap.get("googclient_deliveryattempt") logger.info("Received messageId: ${message.messageId}, content: ${message.data.toStringUtf8()}, attempt count: $atttempt_count" ) try { process message }catch (e : Exception){ if (atttempt_count != null) { if(Integer.parseInt(atttempt_count) <= 3){ acknowledgement.nack() }else{ logger.info("Send message to DLQ") acknowledgement.ack() } } } }
Logs: 17:18:23.696 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - Received messageId: 6040212615481823, content: { "commandType":"DEBUG_MESSAGE", "customerId":"2a237743-4ea0-3d9e-bc35-b89b78d39011", "params":{ "message": "2022-10-24 17:18:22" } } , attempt count: 1 17:18:30.915 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - Received messageId: 6040212615481823, content: { "commandType":"DEBUG_MESSAGE", "customerId":"2a237743-4ea0-3d9e-bc35-b89b78d39011", "params":{ "message": "2022-10-24 17:18:22" } } , attempt count: 2 17:18:33.239 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - Received messageId: 6040212615481823, content: { "commandType":"DEBUG_MESSAGE", "customerId":"2a237743-4ea0-3d9e-bc35-b89b78d39011", "params":{ "message": "2022-10-24 17:18:22" } } , attempt count: 3 17:18:33.644 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - Received messageId: 6040212615481823, content: { "commandType":"DEBUG_MESSAGE", "customerId":"2a237743-4ea0-3d9e-bc35-b89b78d39011", "params":{ "message": "2022-10-24 17:18:22" } } , attempt count: 4 17:18:33.644 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - Send message to DLQ
NACK Block message POC
POC Code
val slackerCommand = mapper.readValue(message.data.toStringUtf8(), SlackerCommand::class.java) val customerId = slackerCommand.customerId if( customerId.toString() == "00000000-0000-0000-0000-000000000000"){ if (atttempt_count != null) { if(Integer.parseInt(atttempt_count) <= 3){ logger.info("reject message: ${message.messageId}, content: ${message.data.toStringUtf8()}") acknowledgement.nack() }else{ logger.info("Send message to DLQ") acknowledgement.ack() } } }else{ logger.info("approve message: ${message.messageId}, content: ${message.data.toStringUtf8()}") acknowledgement.ack() }
Messages in google pubs:
block message which customer id = “
00000000-0000-0000-0000-000000000000
“ and accept other messages.check if the message processor will be blocked
Conclusion:
Google send message in random order, if the message blocked the processor , it will not block other process. We will move this blocked message to dlq queue after retry 3 times and then send acknowledgement to tell google pub skip this message and process next for blocked message. please check below logs.
17:26:54.618 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - Received messageId: 6055838669968923, content: { "commandType": "SEND_NOTIFICATION", "customerId": "2b827c7b-a7e9-4116-af78-940963fd85e4", "params": { "messageType": "RISK_TRANSACTION_REJECTED", "amount": "1102" } }, attempt count: 1 17:26:55.051 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - approve message: 6055838669968923, content: { "commandType": "SEND_NOTIFICATION", "customerId": "2b827c7b-a7e9-4116-af78-940963fd85e4", "params": { "messageType": "RISK_TRANSACTION_REJECTED", "amount": "1102" } } 17:26:55.054 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - Received messageId: 6055838670030697, content: { "commandType": "SEND_NOTIFICATION", "customerId": "2b827c7b-a7e9-4116-af78-940963fd85e4", "params": { "messageType": "RISK_TRANSACTION_REJECTED", "amount": "1101" } }, attempt count: 1 17:26:55.054 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - approve message: 6055838670030697, content: { "commandType": "SEND_NOTIFICATION", "customerId": "2b827c7b-a7e9-4116-af78-940963fd85e4", "params": { "messageType": "RISK_TRANSACTION_REJECTED", "amount": "1101" } } 17:26:55.054 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - Received messageId: 6055838670001673, content: { "commandType": "SEND_NOTIFICATION", "customerId": "00000000-0000-0000-0000-000000000000", "params": { "messageType": "RISK_TRANSACTION_REJECTED", "amount": "1100" } }, attempt count: 1 17:26:55.055 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - reject message: 6055838670001673, content: { "commandType": "SEND_NOTIFICATION", "customerId": "00000000-0000-0000-0000-000000000000", "params": { "messageType": "RISK_TRANSACTION_REJECTED", "amount": "1100" } } 17:26:55.425 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - Received messageId: 6055838670001673, content: { "commandType": "SEND_NOTIFICATION", "customerId": "00000000-0000-0000-0000-000000000000", "params": { "messageType": "RISK_TRANSACTION_REJECTED", "amount": "1100" } }, attempt count: 2 17:26:55.425 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - reject message: 6055838670001673, content: { "commandType": "SEND_NOTIFICATION", "customerId": "00000000-0000-0000-0000-000000000000", "params": { "messageType": "RISK_TRANSACTION_REJECTED", "amount": "1100" } } 17:26:55.833 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - Received messageId: 6055838670001673, content: { "commandType": "SEND_NOTIFICATION", "customerId": "00000000-0000-0000-0000-000000000000", "params": { "messageType": "RISK_TRANSACTION_REJECTED", "amount": "1100" } }, attempt count: 3 17:26:55.833 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - reject message: 6055838670001673, content: { "commandType": "SEND_NOTIFICATION", "customerId": "00000000-0000-0000-0000-000000000000", "params": { "messageType": "RISK_TRANSACTION_REJECTED", "amount": "1100" } } 17:26:56.234 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - Received messageId: 6055838670001673, content: { "commandType": "SEND_NOTIFICATION", "customerId": "00000000-0000-0000-0000-000000000000", "params": { "messageType": "RISK_TRANSACTION_REJECTED", "amount": "1100" } }, attempt count: 4 17:26:56.234 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - Send message to DLQ 17:28:43.606 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - Received messageId: 6055890800229636, content: { "commandType": "SEND_NOTIFICATION", "customerId": "2b827c7b-a7e9-4116-af78-940963fd85e4", "params": { "messageType": "RISK_TRANSACTION_REJECTED", "amount": "1104" } }, attempt count: 1 17:28:43.608 [pubsub-scheduled-executor-thread-1] INFO p.s.s.m.GooglePubSubCommandListener - approve message: 6055890800229636, content: { "commandType": "SEND_NOTIFICATION", "customerId": "2b827c7b-a7e9-4116-af78-940963fd85e4", "params": { "messageType": "RISK_TRANSACTION_REJECTED", "amount": "1104" } }
Monitor
Attachments:
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
Untitled Diagram.drawio (application/vnd.jgraph.mxfile)
Untitled Diagram.drawio.png (image/png)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~drawio~6336f3aa14c6b4b2210e8658~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
slacker-future.drawio (application/vnd.jgraph.mxfile)
slacker-future.drawio.png (image/png)
~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
~slacker-future.drawio.tmp (application/vnd.jgraph.mxfile)
slacker-future.drawio (application/vnd.jgraph.mxfile)
slacker-future.drawio.png (image/png)
deadline-queue.png (image/png)
~Untitled Diagram.drawio.tmp (application/vnd.jgraph.mxfile)
Untitled Diagram.drawio (application/vnd.jgraph.mxfile)
Untitled Diagram.drawio.png (image/png)
enable-dlq.png (image/png)
pub messages.png (image/png)
test-result.png (image/png)
messages.png (image/png)
topics-configuration.png (image/png)