You can usually view message queues as pipes. You put stuff in one end, it comes out the other end. Performance and reliability are often a choice rather than getting both. Most messaging products have an option for "assured delivery" that says if you put something into the pipe you can be assured it will get to the other end. If the other end happens to be down at the moment, the middleware stores it to disk or database or something reliable until the receiver comes back on line.
All I can say about Internet routers is that the more I learned (in a single networking class) the more I was amazed that any of it works. Roughly the same experience I had reading Inside OS/2 in the 90s. I mentioned this to a friend at work who said his kid (!) was writing a router in software as a learning experience. Too scary for me.
Gregor Hohpe has a book called Enterprise Integration
Patterns that is largely about application level messaging. His site
http://www.eaipatterns.com/ has some good info that tends to make you want the book. I wrote a short paper for my team
http://www.surfscranton.com/architecture/MessagingPatterns.htm before I saw Gregor's site.