i am not sure that's the case. see my NATS message log: ┌ Info: debug └ payload = "new user msg" ┌ Info: debug └ payload = "new user msg" ┌ Info: debug └ payload = "new user msg" ┌ Info: debug └ payload = "new user msg" ┌ Info: debug └ payload = "new user msg" ┌ Info: debug └ payload = "new user msg" ┌ Info: debug └ payload = "new user msg" ┌ Info: debug └ payload = "_process_message 3" ┌ Info: debug └ payload = "_process_message 5" ┌ Info: debug └ payload = "_process_message 6" ┌ Info: debug └ payload = "_process_message 7" my NATS receiver report the following for a long time ┌ Info: debug └ payload = "new user msg" untill I Ctrl + d so shutdown the process then i got the following report ┌ Info: debug └ payload = "_process_message 3" ┌ Info: debug └ payload = "_process_message 5" ┌ Info: debug └ payload = "_process_message 6" ┌ Info: debug └ payload = "_process_message 7" my point is if _process_message() actually run then this code in _process_message() "raw_msg = take!(agent.inputChannel)" should take the new msg message out of agent.inputChannel and there should be only one debug message showing ┌ Info: debug └ payload = "new user msg" before reaching error("debug marker")