1. 程式人生 > >RabbitMQ訊息佇列之二:消費者和生產者 Demo

RabbitMQ訊息佇列之二:消費者和生產者 Demo

在使用RabbitMQ之前,需要了解RabbitMQ的工作原理。

RabbitMQ的工作原理

RabbitMQ是訊息代理。從本質上說,它接受來自生產者的資訊,並將它們傳遞給消費者。在兩者之間,它可以根據你給它的路由,緩衝規則進行傳遞訊息。

示例圖

這裡寫圖片描述

RabbitMQ的術語解釋

生產者:生產訊息,傳送訊息。類似工廠。
消費者:接受訊息,使用訊息。類似顧客。
佇列:儲存訊息。類似倉庫、中轉站。佇列可以儲存很多的訊息,因為它基本上是一個無限制的緩衝區,前提是你的機器有足夠的儲存空間。多個生產者可以將訊息傳送到同一個佇列中,多個消費者也可以只從同一個佇列接收資料。這就是佇列的特性。

RabbitMQ 訊息生產者的程式碼實現

import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
public class RabbitProducer {
    private final static String QUEUE_NAME = "RabbitMQ_Hello"
; //訊息佇列名 public static void main(String[] argv) throws Exception { //建立連線連線到RabbitMQ ConnectionFactory factory = new ConnectionFactory(); // 設定ip factory.setHost("127.0.0.1"); /* //設定埠 factory.setPort(15672); //設定使用者名稱 factory.setUsername("guest"); //設定密碼 factory.setPassword("guest"); //設定url(包括ip、埠、使用者名稱、密碼) factory.setUri("amqp://guest:
[email protected]
:15672"); */
// 建立一個連線 Connection connection = factory.newConnection(); // 建立一個頻道 Channel channel = connection.createChannel(); // 指定一個佇列 channel.queueDeclare(QUEUE_NAME, false, false, false, null); Map<String,Object> map=new HashMap<String,Object>(); map.put("java", "hello"); map.put("RabbitMQ", "Hello"); //傳送的訊息 String message = JSON.toJSONString(map); // 往佇列中發出一條訊息 channel.basicPublish("", QUEUE_NAME, null, message.getBytes()); System.out.println(" [x] Sent '" + message + "'"); // 關閉頻道和連線 channel.close(); connection.close(); } }

RabbitMQ訊息消費者的程式碼實現

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

//消費者 
public class RabbitConsumer {

  private final static String QUEUE_NAME = "RabbitMQ_Hello"; //訊息佇列名

  public static void main(String[] argv) throws Exception {

        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("127.0.0.1");
       // 開啟連線和建立頻道,與傳送端一樣  
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
     // 宣告佇列,主要為了防止訊息接收者先執行此程式,佇列還不存在時建立佇列。  
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
      // 建立佇列消費者  
        QueueingConsumer consumer = new QueueingConsumer(channel);
        // 指定消費佇列
        channel.basicConsume(QUEUE_NAME, true, consumer);
        while (true) {  //消費者程式執行開著 如果生產者新增了資料會自動獲取
          Thread.sleep(500);
             // nextDelivery是一個阻塞方法(內部實現其實是阻塞佇列的take方法)  
          QueueingConsumer.Delivery delivery = consumer.nextDelivery();
          String message = new String(delivery.getBody());
          System.out.println("'[x] Received '" + message );
  }   
  }
}

開啟本地的RabbitMQ,之後執行生產者程式碼,會將訊息儲存到RabbitMQ中,可以通過RabbitMQ web介面看到訊息。

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

執行消費者程式碼,會將該訊息消費掉,可以在RabbitMQ web介面可以發現上面儲存的訊息已經沒有了。
這裡寫圖片描述

這裡寫圖片描述

通過這個demo,可以對訊息佇列有了一個的基本的瞭解了。

相關推薦

RabbitMQ訊息佇列:消費者生產者 Demo

在使用RabbitMQ之前,需要了解RabbitMQ的工作原理。 RabbitMQ的工作原理 RabbitMQ是訊息代理。從本質上說,它接受來自生產者的資訊,並將它們傳遞給消費者。在兩者之間,它可以根據你給它的路由,緩衝規則進行傳遞訊息。 示例圖

RabbitMQ 訊息佇列 Exchange Types

寫在前面 RabbitMQ遵循AMQP 0-9-1協議 複製程式碼 AMQP 0-9-1協議簡介 訊息釋出到交換站,這通常被比作郵局或郵箱。然後交換器使用稱為繫結的規則將訊息副本分發到佇列。然後,AMQP代理將訊息傳遞給訂閱佇列的消費者,或者根據需要從佇列中獲取訊息。 釋出訊息時,釋出者可以指定各種

rabbitmq訊息佇列設定過期時間過期訊息處理

rabbitmq訊息佇列設定過期時間和過期訊息處理 適用場景 電商秒殺搶購活動中處理使用者下單和付款時間不一致,設定過期時間,過期則不允許付款 參考 https://blog.csdn.net/zhu_tianwei/article/details/53563

RabbitMQ 訊息佇列佇列模型

RabbitMQ提供如下5種佇列模型 1.“Hello World!”. 簡單模式 2.Work Queues (又名: Task Queues) . 工作佇列,在消費者之間分配任務(競爭的消費者模式

RabbitMQ訊息佇列):”Hello, World“

原文地址:http://blog.csdn.net/anzhsoft/article/details/19570187    本文將使用Python(pika 0.9.8)實現從Producer到Consumer傳遞資料”Hello, World“。      首先複習一下上篇所學:RabbitMQ實現

RabbitMQ訊息佇列) fanout 廣播模式

先粘程式碼 生產者 ConnectionFactory connectionFactory = new ConnectionFactory(); Connection connection = connectionFa

基於Python語言使用RabbitMQ訊息佇列

工作佇列 在第一節我們寫了程式來向命名佇列傳送和接收訊息 。在本節我們會建立一個工作佇列(Work Queue)用來在多個工人(worker)中分發時間消耗型任務(time-consuming tasks)。 工作佇列(又叫做: Task Queues)背後

RabbitMQ訊息佇列生產者消費者

概述 生產者生產資料至 RabbitMQ 佇列,消費者消費 RabbitMQ 佇列裡的資料。 詳細 一、準備工作 1、安裝 RabbitMQ 服務和 RabbitMQ Management。 2、在 RabbitMQ 管理介面建立使用者 test

訊息佇列RabbitMQ - 簡介安裝

       訊息佇列:是簡單的生產者和消費者模式,它的出現是讓各個服務板塊之間解耦和訊息通知。比如,我們一般生成服務板塊中的資料存在有:資料庫,靜態檔案,搜尋系統,hdfs等,那麼如果資料庫中的資料發生了變化,怎麼把這個訊息推送給其他的資料儲存單元呢?如果單

RabbitMQ訊息佇列系列教程()Windows下安裝部署RabbitMQ

摘要 本篇經驗將和大家介紹Windows下安裝和部署RabbitMQ訊息佇列伺服器,希望對大家的工作和學習有所幫助! 目錄 一、Erlang語言環境的搭建 RabbitMQ開源訊息佇列服務是使用Erlang語言開發的,因此我們要使用他就必須先進行Erlang語言環境的搭建,其實是非常簡

訊息佇列activeMQ的啟動關閉(學習筆記)

1、activeMQ是一個使用java開發的訊息中介軟體2、在windows和linux解壓縮3、cd 到apache-activemq-5.11.1目錄下的bin目錄,執行activemq start和activemq stop即可4、預設埠為81615.客戶端表格的欄位含

Windows訊息機制(續)-- windows訊息訊息佇列

與基於MS - DOS的應用程式不同,Windows的應用程式是事件(訊息)驅動的。它們不會顯式地呼叫函式(如C執行時庫呼叫)來獲取輸入,而是等待windows向它們傳遞輸入。 windows系統把應用程式的輸入事件傳遞給各個視窗,每個視窗有一個函式,稱為視窗訊息處理函式。

併發無鎖佇列學習【單生產者消費者

1、前言   最近工作比較忙,加班較多,每天晚上回到家10點多了。我不知道自己還能堅持多久,既然選擇了就要做到最好。寫部落格的少了。總覺得少了點什麼,需要繼續學習。今天繼續上個開篇寫,介紹單生產者單消費者模型的佇列。根據寫入佇列的內容是定長還是變長,分為單生產者單消費者定長佇列和單生產者單消費者變長佇列兩

、Kafka基礎實戰:消費者生產者實例

消費者 12.1 實戰 tof star inter 傳遞 默認 參數調優 一、Kafka消費者編程模型 1.分區消費模型 分區消費偽代碼描述 main() 獲取分區的size for index =0 to size crea

pythonRabbitMQ訊息佇列

RabbitMQ:訊息佇列 PY裡的佇列有:執行緒QUEUE、程序QUEUE 程序queue可以用於父程序與子程序進行互動,或者同屬於一父程序下多個子程序進行互動,但如果是兩個獨立的程式,是不能用這個QUEUE進行通訊的。 兩個獨立的程式之間,要找一箇中間代理,比如可以用socket通訊

多執行緒的等待喚醒機制消費者生產者模式

/** * 等待喚醒之生產者和消費者模型 * 生成者: 建立和新增資料的執行緒 * 消費者: 銷燬和刪除資料的執行緒 * 問題1: 生成者生成資料過快, 消費者消費資料相對慢,不接收資料了, 會造成資料丟失 * 問題2: 消費者消費資料過快, 生成者生成資料相對慢,不傳送資料了, 會造成資料被重複讀取

訊息佇列RabbitMQ原理

什麼是AMQP? AMQP,高階訊息佇列協議,是應用層協議的一個開放標準,為面向訊息的中介軟體而設計的。基於此協議的客戶端與訊息中介軟體可以傳遞訊息,並不受客戶端/中介軟體不同產品,不同的開發語言等條件的限制。RabbitMQ就是通過Erlang語言實現的一種訊息中

(十RabbitMQ訊息佇列-效能測試

硬體配置 宿主機用的聯想3850X6的伺服器四顆E7-4850v3的處理器,DDR4記憶體,兩塊1.25TB的pcie固態。在宿主機上使用的事esxi5.5的虛擬化平臺,在子系統中安裝RabbitMQ和測試指令碼,RabbitMQ配置如下: CPU:24核 記憶體:24GB 硬碟:

、Kafka基礎實戰:消費者生產者例項

package kafka.consumer.partition; import kafka.api.FetchRequest; import kafka.api.FetchRequestBuilder; import kafka.api.PartitionOffsetRequestInfo;

java B2B2C Springboot電子商城系統-訊息佇列 RabbitMQ

常見的訊息佇列 需要JAVA Spring Cloud大型企業分散式微服務雲構建的B2B2C電子商務平臺原始碼請加企鵝求求:二一四七七七五六三三 目前業界有四款常用的訊息佇列,它們分別是RabbitMQ、RocketMQ、ActiveMQ和Kafka。 RabbitMQ Rabbit