RabbitMQ 入門

RabbitMQ 簡介

RabbitMQ 是一個負責發送和接收消息的消息中間件。你能夠把它形容成一個郵局,當你把信件丟到郵箱後,郵局的人就會把信件送到你指定的接收人
手中。不一樣的是 RabbitMQ 處理的是二進制數據,而非紙質的信件。

RabbitMQ 模型

以下圖所示,RabbitMQ 由以下幾個部分組成, Publisher(消息生產者),Consumer(消息消費者)
以及Exchange,Queue,Bindings。

關於後三者,這裏照搬官網的說法:
Queue 就像你要去的目的地城市
Exchange 像你在始發地乘坐的航班
Bindings 就比如路線圖,有 0個 或 多個路線能夠幫助你到達目的地。


幾種工做模式

RabbitMQ 有以下幾種工做模式:html

  1. 簡單模式服務器

  2. 工做隊列模式3d

  3. 發佈/訂閱模式code

  4. 路由器模式htm

  5. topics 模式中間件

1. 簡單模式

這裏先對簡單模式,作一個簡單的介紹,其餘模式會在後續的文章中一一介紹。對象

先來看一張圖blog

從圖中能夠看到,簡單模式突出了三個對象,教程

1. Producer  
發送 message 的一個程序
2. Queue 
存儲消息的一個「盒子」,多個生產者能夠往同一個隊列發送消息。多個消費者能夠接收來自同一個隊列的消息。
3. Consumer
等待接收隊列中消息的程序

代碼

運行如下代碼的前提是,已經在本地或者服務器安裝了 RabbitMQ,(順便插一句,RabbitMQ 的默認端口是 5762,RabbitMQ 的後臺管理的端口是15672)安裝過程請參照 RabbitMQ 安裝教程rabbitmq

1. 生產者

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){

	}
	}

}

2. 消費者

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){
		
	}
	}

}
相關文章
相關標籤/搜索