RabbitMQ 是一個負責發送和接收消息的消息中間件。你能夠把它形容成一個郵局,當你把信件丟到郵箱後,郵局的人就會把信件送到你指定的接收人 手中。不一樣的是 RabbitMQ 處理的是二進制數據,而非紙質的信件。
以下圖所示,RabbitMQ 由以下幾個部分組成, Publisher(消息生產者),Consumer(消息消費者) 以及Exchange,Queue,Bindings。 關於後三者,這裏照搬官網的說法: Queue 就像你要去的目的地城市 Exchange 像你在始發地乘坐的航班 Bindings 就比如路線圖,有 0個 或 多個路線能夠幫助你到達目的地。
RabbitMQ 有以下幾種工做模式:html
簡單模式服務器
工做隊列模式3d
發佈/訂閱模式code
路由器模式htm
topics 模式中間件
這裏先對簡單模式,作一個簡單的介紹,其餘模式會在後續的文章中一一介紹。對象
先來看一張圖blog
從圖中能夠看到,簡單模式突出了三個對象,教程
1. Producer 發送 message 的一個程序 2. Queue 存儲消息的一個「盒子」,多個生產者能夠往同一個隊列發送消息。多個消費者能夠接收來自同一個隊列的消息。 3. Consumer 等待接收隊列中消息的程序
運行如下代碼的前提是,已經在本地或者服務器安裝了 RabbitMQ,(順便插一句,RabbitMQ 的默認端口是 5762,RabbitMQ 的後臺管理的端口是15672)安裝過程請參照 RabbitMQ 安裝教程rabbitmq
public class RbSender { private static String QUEUE_NAME = "default"; private static String msg = "hello world!"; public static void main(String[] args){ try{ ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); // 聲明一個隊列 channel.queueDeclare(QUEUE_NAME, false, false, false, null); channel.basicPublish("", QUEUE_NAME, null, msg.getBytes()); }catch(Exception e){ } } }
public class RbReceiver { private static String QUEUE_NAME = "default"; public static void main(String[] args){ try{ ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); // 聲明一個隊列 channel.queueDeclare(QUEUE_NAME, false, false, false, null); // 回調 DeliverCallback deliverCallback = (consumerTag, delivery) -> { String message = new String(delivery.getBody(), "UTF-8"); System.out.println(" [x] Received '" + message + "'"); }; // channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { }); }catch(Exception e){ } } }