RabbitMQ之Falldisc(持久化)
RabbitMQ的訊息佇列是駐留記憶體的, 萬一機器Down機的話, 記憶體裡的佇列, 也會消失不見. 為解決這個問題, 才有了”持久化” 這個概念.
顧名思義: 將訊息佇列存到硬碟上(落盤)的檔案中, 勢必會影響效率
訊息實體
package com.yuchen.demo.falldisc;
import java.io.Serializable;
public class Message implements Serializable {
private static final long serialVersionUID = 1L;
String xxx;
public Message(String xxx) {
this.xxx = xxx;
}
public String getXxx() {
return xxx;
}
public void setXxx(String xxx) {
this.xxx = xxx;
}
@Override
public String toString() {
return this.xxx;
}
}
生產者
package com.yuchen.demo.falldisc;
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;
public class Send {
// 佇列名稱
private final static String QUEUE_NAME = "lsy_falldisc" ;
public static void main(String[] args) throws Exception {
// 建立連線連線到MabbitMQ
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("10.13.144.24");
factory.setVirtualHost("/");
factory.setPort(5672);
factory.setUsername("admin");
factory.setPassword("admin");
// 新建連線
Connection connection = factory.newConnection();
// 建立通道
Channel channel = connection.createChannel();
// 建立佇列 (佇列名稱, 持久化, 僅有1個consumer 與autoDelete配合使用 沒有consumer自動刪除 , 自動刪除, 其他引數)
channel.queueDeclare(QUEUE_NAME, true, false, false, null);
// 傳送訊息 byte[]
// 使用者可以把自己的訊息序列化成JSON等格式在轉成byte[]傳送到佇列中取出訊息後再反序列化得到訊息內容
Message message = new Message("Hello Message !");
// 訊息持久化 MessageProperties.PERSISTENT_TEXT_PLAIN
ByteArrayOutputStream baos = new ByteArrayOutputStream(10000);
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(message);
channel.basicPublish("", QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, baos.toByteArray());
System.out.println("傳送成功: '" + message + "'");
// 關閉連線
channel.close();
connection.close();
}
}
消費者
package com.yuchen.demo.falldisc;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
public class MessageConsumer {
// 佇列名稱
private final static String QUEUE_NAME = "message_falldisc";
public static void start() throws Exception {
// 建立連線連線到MabbitMQ
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("10.13.144.24");
factory.setVirtualHost("/");
factory.setPort(5672);
factory.setUsername("admin");
factory.setPassword("admin");
// 新建連線
Connection connection = factory.newConnection();
// 建立通道
Channel channel = connection.createChannel();
// 宣告佇列, 可能在傳送方之前啟動接收方, 確保佇列存在。
channel.queueDeclare(QUEUE_NAME, true, false, false, null);
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
ByteArrayInputStream bais = new ByteArrayInputStream(body);
ObjectInputStream ois = new ObjectInputStream(bais);
Message message = null;
try {
message = (Message) ois.readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println("接收到遠端訊息: '" + message.toString() + "'");
}
};
channel.basicConsume(QUEUE_NAME, true, consumer);
}
}
重點在於
佇列要持久化(第二個引數 true)
channel.queueDeclare(QUEUE_NAME, true, false, false, null);
訊息也要持久化(第三個引數MessageProperties.PERSISTENT_TEXT_PLAIN)
channel.basicPublish("", QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, baos.toByteArray());
相關推薦
RabbitMQ之Falldisc(持久化)
RabbitMQ的訊息佇列是駐留記憶體的, 萬一機器Down機的話, 記憶體裡的佇列, 也會消失不見. 為解決這個問題, 才有了”持久化” 這個概念. 顧名思義: 將訊息佇列存到硬碟上(落盤)的檔案中
RabbitMQ之訊息持久化(轉)
原文地址 https://blog.csdn.net/u013256816/article/details/60875666/ 訊息的可靠性是RabbitMQ的一大特色,那麼RabbitMQ是如何保證訊息可靠性的呢——訊息持久化。 為了保證RabbitMQ在退出或者crash等異常
RabbitMQ之訊息持久化(佇列持久化、訊息持久化)
訊息的可靠性是RabbitMQ的一大特色,那麼RabbitMQ是如何保證訊息可靠性的呢——訊息持久化。 為了保證RabbitMQ在退出或者crash等異常情況下資料沒有丟失,需要將queue,exchange和Message都持久化。 queue的持久化 queue
第五章:Python 之 RabbitMQ消息持久化
rabbitmq#測試RabbitMQ消息永久化 #1. 分隊列永久化和信息永久化 #2. 意思為當服務重啟後,隊列和消息還存在,可供客戶端接受 #3. 在服務器查看消息隊列命令./rabbitmqctl list_queues #send 端 import pika credentials = pik
RabbitMQ之佇列與訊息持久化
佇列持久化 在之前的例子中,我們所用的佇列都是臨時佇列,當服務重啟後之前建立的佇列就都沒有了。 佇列的持久化是在定義佇列時的第二個引數決定的(false為佇列不用持久化) channel.queueDeclare(queueName, false, false
RabbitMQ學習筆記五:RabbitMQ之優先級消息隊列
-c virtual 調用 itl 3.5 rri color images 執行順序 RabbitMQ優先級隊列註意點: 1、只有當消費者不足,不能及時進行消費的情況下,優先級隊列才會生效 2、RabbitMQ3.5以後才支持優先級隊列 代碼在博客:RabbitMQ學習筆
細說Tomcat之session持久化探秘
分享 我們 級別 業務 這樣的 再次 感到 cal 正常 業務場景:通常,我們會在會話級別存放一些參數,期望在session生命周期內,可以一直取得保存在session中的指定數據;而只要session過期或者失效,則需要執行重新登錄等操作。但是!我們對於這樣的場景會感到很
Tomcat 之session 持久化1
ajp 管理 dma element his upm 十月 amp exceptio Tomcat 之session 持久化原理 幾個概念: Manager 接口,其實就是指的是對 其Sesison 的管理, 其默認實現是StandardManager (內部沒有任何
RabbitMQ之消費者Demo(隊列參數詳細說明)
per don create pac col div icp rod 忽略 1 package com.jiefupay; 2 3 import java.io.IOException; 4 import java.util.HashMap; 5 i
Rabbitmq消息持久化
配置 timeout 進程 gray 產生 let 還需 建立 simple 消息的可靠性是RabbitMQ的一大特色,那麽RabbitMQ是如何保證消息可靠性的呢——消息持久化。?為了保證RabbitMQ在退出或者crash等異常情況下數據沒有丟失,需要將queue,ex
Java使用RabbitMQ之公平分發
env 接受 col java catch conn ech exceptio don 發送消息: 1 package org.study.workfair; 2 3 import com.rabbitmq.client.Channel; 4 import co
Java使用RabbitMQ之整合Spring(生產者)
獲取 消息 org str 依賴 chang import name 5.1 依賴包 <!--RabbitMQ集成spring--> <!-- https://mvnrepository.com/artifact/org
SpringBoot整合RabbitMQ之發送接收消息實戰
container 會同 prope spring 註解 流行 pin public lin 實戰前言 前幾篇文章中,我們介紹了SpringBoot整合RabbitMQ的配置以及實戰了Spring的事件驅動模型,這兩篇文章對於我們後續實戰RabbitMQ其他知識要點將起到奠
redis之 Redis持久化配置
持久 mes dbf ESS -m 解決 所有 lena 檢驗 Redis持久化配置 Redis的持久化有2種方式 1快照 2是日誌 Rdb快照的配置選項 save 900 1 // 900內,有1條寫入,則產生快照 save 300 1000
SpringBoot整合RabbitMQ之典型應用場景實戰二
factor aid 分享圖片 actor esp rem 排隊 stc tps 實戰前言RabbitMQ 作為目前應用相當廣泛的消息中間件,在企業級應用、微服務應用中充當著重要的角色。特別是在一些典型的應用場景以及業務模塊中具有重要的作用,比如業務服務模塊解耦、異步通信、
SpringBoot整合RabbitMQ之典型應用場景實戰三
分布 boot 自動刪除 blog jce 地址 這樣的 實施 微服務 實戰前言RabbitMQ 作為目前應用相當廣泛的消息中間件,在企業級應用、微服務應用中充當著重要的角色。特別是在一些典型的應用場景以及業務模塊中具有重要的作用,比如業務服務模塊解耦、異步通信、高並發限流
RabbitMQ之win下安裝
1、安裝前準備 RabbitMQ 是建立在強大的Erlang OTP平臺上,因此安裝RabbitMQ之前要先安裝Erlang。 erlang:http://www.erlang.org/download.html rabbitmq:http://www.rabbitmq.com/down
進階的Redis之資料持久化RDB與AOF
大家都知道,Redis之所以效能好,讀寫快,是因為Redis是一個記憶體資料庫,它的操作都幾乎基於記憶體。但是記憶體型資料庫有一個很大的弊端,就是當資料庫程序崩潰或系統重啟的時候,如果記憶體資料不儲存的話,裡面的資料就會丟失不見了。這樣的資料庫並不是一個可靠的資料庫。 所以資料的持久化是記憶體型資料庫的重中
SpringBoot整合RabbitMQ之 典型應用場景實戰二
實戰前言 RabbitMQ 作為目前應用相當廣泛的訊息中介軟體,在企業級應用、微服務應用中充當著重要的角色。特別是在一些典型的應用場景以及業務模組中具有重要的作用,比如業務服務模組解耦、非同步通訊、高併發限流、超時業務、資料延遲處理等。上一篇博文我分享了RabbitMQ在業務服務模組解耦,非
SpringBoot整合RabbitMQ之 典型應用場景實戰一
實戰前言 RabbitMQ 作為目前應用相當廣泛的訊息中介軟體,在企業級應用、微服務應用中充當著重要的角色。特別是在一些典型的應用場景以及業務模組中具有重要的作用,比如業務服務模組解耦、非同步通訊、高併發限流、超時業務、資料延遲處理等。 RabbitMQ 官網拜讀 首先,讓我們先拜讀