This textbook contains a two-semester course on queueing theory, including an introduction to matrix-analytic methods. Its purpose is to present concrete queueing models and their applications, while providing a sound mathematical foundation for their analysis. A prominent part of the book will be devoted to matrix-analytic methods: a collection of approaches which extend the applicability of Markov renewal methods to queueing theory by introducing a finite number of auxiliary states. The text is geared to last year undergraduate and first year graduate students of applied probability and computer science, who have completed an introduction to probability theory.