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
python之RabbitMQ訊息佇列
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