If the overload is simply that you might start to receive a following message before you have finished processing the current one then one possible approach is to use swinging buffers between the interrupt that receives messages and the main context that handles them, so that the interrupt can continue to receive messages while the main context is busy. However, there is very limited memory available in the Arduino and you can't simply rely on the Arduino being able to buffer all received USB traffic until it gets round to handling it. If the USB host is liable to send messages faster than the Arduino can handle them then you need to decide at an architectural level what flow control is needed and how you are going to achieve that. That could be just rate-limiting the sender, or requiring a positive handshake, or any other scheme that you prefer.