1. 程式人生 > >【RabbitMQ】2.入門程式Hello world

【RabbitMQ】2.入門程式Hello world

在開始開發前,需要先安裝的RabbitMQ的所需的軟體及獲取的JAR包。

一中,Windows下的的RabbitMQ的安裝

下載二郎,地址:http://www.erlang.org/download/otp_win32_R15B.exe,雙擊安裝即可(首先裝)

下載RabbitMQ的,地址:http://www.rabbitmq.com/releases/rabbitmq-server/v3.3.4/rabbitmq-server-3.3.4.exe,雙擊安裝即可

下載兔client.jar中,Java的程式碼時需要匯入地址:HTTP://www.rabbitmq.com/releases/rabbitmq-java-client/v3.3.4/rabbitmq-java-client-bin-3.3.4.zip

安裝完成後,在RabbitMQ的的的安裝目錄的sbin目錄目錄先會有:RabbitMQ的的-server.bat

在cmd進入命令列介面後,切換到sbin目錄下,執行rabbitmq-server.bat start命令,啟動RabbitMQ服務。

2.入門程式開發

一個生產者傳送訊息,一個消費者接收訊息,並在控制檯打印出來。

步驟:

1)。新建一個的java的專案,匯入兔client.jar中中包

2)。新建一個生產者類傳送,連線到的RabbitMQ的服務,傳送一條資訊,然後退出。

      a。通過連線工廠建立連線;建立連線傳入的引數就是RabbitMQ Server的ip或者名稱。

      b通過連線連線建立通道(頻道)。

      Ç通過通道指定佇列佇列,生產者和消費者都應該去建立。

      d傳送訊息,此處使用預設的交換器的交流,其routing_key即為佇列名。

      即關閉頻道,關閉連線。

package com.bj.rabbitmq.study;

import java.io.IOException;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class Send {
	//佇列名稱
	public final static String QUEUE_NAME = "hello";
	
	public static void main(String[] args) throws IOException {
		//建立連線 連線到rabbitmq訊息佇列
		ConnectionFactory cf = new ConnectionFactory();
		//設定RabbitMQ所在主機ip或者主機名
		cf.setHost("localhost");
		//建立一個連線
		Connection c = cf.newConnection();
		//建立一個頻道
		Channel ch = c.createChannel();
		//指定一個佇列
		ch.queueDeclare(QUEUE_NAME, false, false, false, null);
		String message = "hello rabbitmq";
		//往佇列中釋出一條訊息
		ch.basicPublish("", QUEUE_NAME, null, message.getBytes());
		System.out.println("[send]:"+message);
		
		ch.close();
		c.close();
	}
}

值得注意的是佇列只會在它不存在的時候建立,多次宣告並不會重複建立。資訊的內容是位元組陣列,也就意味著你可以傳遞任何資料。

3)。新建一個接收類的預留,不斷等待伺服器推送訊息,然後在控制檯輸出。

      a。通過連線工廠建立連線;建立連線傳入的引數就是RabbitMQ Server的ip或者名稱。

      b通過連線連線建立通道(頻道)。

      Ç通過通道指定佇列佇列,生產者和消費者都應該去建立。

      d繫結該佇列的消費者。

      即無線迴圈監聽佇列佇列,當有訊息時,輸出。

package com.bj.rabbitmq.study;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;

public class Recv {
	//佇列名稱
	private final static String QUEUE_NAME = "hello";
 
	public static void main(String[] argv) throws java.io.IOException,
			java.lang.InterruptedException
	{
		//開啟連線和建立頻道,與傳送端一樣
		ConnectionFactory factory = new ConnectionFactory();
		factory.setHost("localhost");
		Connection connection = factory.newConnection();
		Channel channel = connection.createChannel();
		//宣告佇列,主要為了防止訊息接收者先執行此程式,佇列還不存在時建立佇列。
		channel.queueDeclare(QUEUE_NAME, false, false, false, null);
		System.out.println(" [Waiting] 等待訊息。。。");
		
		//建立佇列消費者
		QueueingConsumer consumer = new QueueingConsumer(channel);
		//指定消費佇列
		channel.basicConsume(QUEUE_NAME, true, consumer);
		while (true)
		{
			//nextDelivery是一個阻塞方法(內部實現其實是阻塞佇列的take方法)
			QueueingConsumer.Delivery delivery = consumer.nextDelivery();
			String message = new String(delivery.getBody());
			System.out.println(" [Received]:" + message);
		}
 
	}
}

4)。分別執行Send.java和Recv.java順序無所謂。前提的RabbitMQ服務開啟。

 

參考:

https://blog.csdn.net/anzhsoft2008/column/info/rabbitmq 

https://blog.csdn.net/lmj623565791/article/list/7