1、簡介
RabbitMQ是消息代理:它接受和轉發消息。你可以把它當作一個郵局:當你把你要郵寄的郵件放在信箱里時,你可以肯定Postman先生最終會把郵件送到你的收件人那里。在這個比喻中,RabbitMQ是郵局,郵局郵差。RabbitMQ和郵局之間的主要區別是,它不處理紙張,而是接受、存儲和轉發二進制數據‒消息。
整體的設計如下圖:
java環境下,使用rabbitmq需要用到jar包:amqp-client.jar
2、發送消息
想要將消息發送到隊列中,我們需要進行下面幾步:
(1)建立服務鏈接
1 ConnectionFactory factory = new ConnectionFactory(); 2 factory.setHost("localhost"); // 設置ip地址 3 factory.setPort(5672); // rabbit的端口號,默認為5672,可以不寫 4 factory.setPassword("rabbit"); // 發送消息用戶的登錄密碼 5 factory.setUsername("rabbit"); // 發送消息用戶的登錄用戶名 6 Connection connection = factory.newConnection(); // 新建鏈接 7 Channel channel = connection.createChannel(); // 創建channel
(2)聲明消息隊列
1 channel.queueDeclare("QUEUE_NAME", false, false, false, null);
(3)調用方法發送消息
1 String message = "Hello World!"; // 待發送的消息 2 channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
(4)發送消息過后,需要關閉鏈接
1 channel.close(); 2 connection.close();
3、接收消息
接下來,當生產者將消息發送到隊列之后,我們消費者一方就可以從隊列中接收到消息了:
(1)建立服務器鏈接,和生產者一方一樣
1 ConnectionFactory factory = new ConnectionFactory(); 2 factory.setHost("localhost"); // 設置ip地址 3 factory.setPort(5672); // rabbit的端口號,默認為5672,可以不寫 4 factory.setPassword("rabbit"); // 發送消息用戶的登錄密碼 5 factory.setUsername("rabbit"); // 發送消息用戶的登錄用戶名 6 Connection connection = factory.newConnection(); // 新建鏈接 7 Channel channel = connection.createChannel(); // 創建channel
(2)聲明消息隊列
1 channel.queueDeclare("QUEUE_NAME", false, false, false, null);
(3)聲明回調方法,接收服務器從隊列中發過來的消息
1 Consumer consumer = new DefaultConsumer(channel) { 2 @Override 3 public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { 6 String message = new String(body, "UTF-8"); 7 System.out.println(" [x] Received '" + message + "'"); 8 } 9 }; 10 channel.basicConsume(QUEUE_NAME, true, consumer);
4、運行查看結果
分別運行生產者方和消費者方的代碼過后,通過生產者方發送消息過后,就可以在消費者方接收到發送過來的數據了。