隊列服務
1. 消息服務和消息隊列有何區別
消息來隊列:用於消息,不自是簡單的數據信息傳遞,消息隊列還包括消息有優先順序、消息到達通知等豐富內容。
管道:低級的通信機制,消息隊列比管道高級多了,管道分pipe和fifo,pipe是無名的,所以只能在進程內或父子進程間通信,fifo可任何兩個進程間通信了。不過這兩個依然比較低級,完成高級的應用伺服器還需要消息隊列等。
2. 如何應用.NET中的消息隊列服務
直接在代碼中寫代碼就行了~
3. 如何設置用戶的默認隊列和服務的信息
若要執行存儲操作,您需要一個 Windows Azure 存儲帳戶。可通過以下步驟創建存儲帳戶。(也可以使用 REST API 創建存儲帳戶。)
登錄到 Windows Azure 管理門戶。
在導航窗格的底部,單擊「新建」。
+新建
依次單擊「數據服務」、「存儲」和「快速創建」。
「快速創建」對話框
在 URL 中,鍵入要在存儲帳戶的 URI 中使用的子域名稱。輸入的名稱可包含 3-24 個小寫字母和數字。此值將成為用於對訂閱的 Blob、隊列或表資源進行定址的 URI 中的主機名。
選擇要在其中查找存儲的區域/地緣組。如果要使用 Windows Azure 應用程序中的存儲,請選擇要在其中部署該應用程序的區域。
還可以選擇啟用異地復制。
單擊「創建存儲帳戶」。
創建 Java 應用程序
在本指南中,您將使用存儲功能,這些功能可在 Java 應用程序中本地運行,或在 Windows Azure 的 Web 角色或輔助角色中運行的代碼中運行。假定您已下載並安裝 Java 開發工具包 (JDK),並已按照下載 Windows Azure SDK for Java 中的說明進行操作來安裝 Windows Azure Libraries for Java 和 Windows Azure SDK,還在 Windows Azure 訂閱中創建了 Windows Azure 存儲帳戶。您可以使用任何開發工具(包括「記事本」)創建應用程序。您只要能夠編譯 Java 項目和引用 Windows Azure Libraries for Java 即可。
配置您的應用程序以訪問隊列存儲
將下列導入語句添加到要在其中使用 Windows Azure 存儲 API 以訪問隊列的 Java 文件的頂部:
// Include the following imports to use queue APIs
import com.microsoft.windowsazure.services.core.storage.*;
import com.microsoft.windowsazure.services.queue.client.*;
設置 Windows Azure 存儲連接字元串
Windows Azure 存儲客戶端使用存儲連接字元串來存儲用於訪問數據管理服務的終結點和憑據。在客戶端應用程序中運行時,必須提供以下格式的存儲連接字元串,並對 AccountName 和 AccountKey 值使用管理門戶中列出的存儲帳戶的名稱和存儲帳戶的主訪問密鑰。此示例演示如何聲明用於保存連接字元串的靜態欄位:
// Define the connection-string with your values
public static final String storageConnectionString =
"DefaultEndpointsProtocol=http;" +
"AccountName=your_storage_account;" +
"AccountKey=your_storage_account_key";
在 Windows Azure 的角色中運行的應用程序中,此字元串可存儲在服務配置文件 ServiceConfiguration.cscfg 中,並可通過調用 RoleEnvironment.getConfigurationSettings 方法進行訪問。下面是從服務配置文件中名為 StorageConnectionString 的 Setting 元素中獲取連接字元串的示例:
// Retrieve storage account from connection-string
String storageConnectionString =
RoleEnvironment.getConfigurationSettings().get("StorageConnectionString");
如何:創建隊列
利用 CloudQueueClient 對象,可以獲得隊列的引用對象。以下代碼將創建 CloudQueueClient 對象。
本指南中的所有代碼都使用聲明了上述兩種方式之一的存儲連接字元串。還可以通過其他方式創建 CloudStorageAccount 對象。有關詳細信息,請參閱 Javadocs 文檔中的 CloudStorageAccount。
// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);
// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();
使用 CloudQueueClient 對象獲取對要使用的隊列的引用。如果隊列不存在,您可以創建它。
// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");
// Create the queue if it doesn't already exist
queue.createIfNotExist();
如何:向隊列添加消息
若要將消息插入現有隊列,請先創建一條新的 CloudQueueMessage。緊接著,調用 addMessage 方法。可從字元串(UTF-8 格式)或位元組數組創建 CloudQueueMessage。以下代碼將創建隊列(如果隊列不存在)並插入消息「Hello, World」。
// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);
// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");
// Create the queue if it doesn't already exist
queue.createIfNotExist();
// Create a message and add it to the queue
CloudQueueMessage message = new CloudQueueMessage("Hello, World");
queue.addMessage(message);
如何:查看下一條消息
通過調用 peekMessage,可以查看隊列前面的消息,而不必從隊列中將其刪除。
// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);
// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");
// Peek at the next message
CloudQueueMessage peekedMessage = queue.peekMessage();
如何:取消對下一條消息的排隊
您的代碼通過兩個步驟取消在隊列中對消息的排隊。在調用 retrieveMessage 時,您將獲得隊列中的下一條消息。從 retrieveMessage 返回的消息變得對從此隊列讀取消息的任何其他代碼不可見。默認情況下,此消息將持續 30 秒不可見。若要完全從隊列中刪除消息,您還必須調用 deleteMessage。此刪除消息的兩步過程可確保當您的代碼因硬體或軟體故障而無法處理消息時,您的其他代碼實例可以獲取同一消息並重試。您的代碼在處理消息後會立即調用 deleteMessage。
// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);
// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");
// Retrieve the first visible message in the queue
CloudQueueMessage retrievedMessage = queue.retrieveMessage();
// Process the message in less than 30 seconds, and then delete the message.
queue.deleteMessage(retrievedMessage);
如何:更改已排隊消息的內容
您可以更改隊列中已就位消息的內容。如果消息表示工作任務,則可以使用此功能更新工作任務的狀態。以下代碼使用新內容更新隊列消息,並將可見性超時設置為再延長 60 秒。這將保存與消息關聯的工作的狀態,並額外為客戶端提供一分鍾的時間來繼續處理消息。可使用此方法跟蹤隊列消息上的多步驟工作流,即使處理步驟因硬體或軟體故障而失敗,也無需從頭開始操作。通常,您還可以保留重試計數,如果某條消息的重試次數超過 n 次,您將刪除此消息。這可避免消息在每次處理時都觸發應用程序錯誤。
// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);
// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");
// Retrieve the first visible message in the queue
CloudQueueMessage message = queue.retrieveMessage();
// Modify the message content and set it to be visible in 60 seconds
message.setMessageContent("Updated contents.");
EnumSet<MessageUpdateFields> updateFields =
EnumSet.of(MessageUpdateFields.CONTENT, MessageUpdateFields.VISIBILITY);
queue.updateMessage(message, 60, updateFields, null, null);
用於對消息取消排隊的其他方法
您可以通過兩種方式自定義隊列中的消息檢索。首先,您可以獲取一批消息(最多 32 個)。其次,您可以設置更長或更短的不可見超時,從而允許您的代碼使用更多或更少的時間來徹底處理每條消息。
以下代碼示例使用 retrieveMessages 方法通過一次調用獲取 20 條消息。然後,它使用 for 循環來處理每條消息。它還將每條消息的不可見超時設置為五分鍾(300 秒)。請注意,這五分鍾超時對於所有消息都是同時開始的,因此在調用 retrieveMessages 五分鍾後,尚未刪除的任何消息都將再次變得可見。
// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);
// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");
// Retrieve 20 messages from the queue with a visibility timeout of 300 seconds
for (CloudQueueMessage message : queue.retrieveMessages(20, 300, null, null)) {
// Do processing for all messages in less than 5 minutes,
// deleting each message after processing.
queue.deleteMessage(message);
}
如何:獲取隊列長度
您可以獲得隊列中消息的估計數。downloadAttributes 方法會詢問隊列服務一些當前值,包括隊列中消息的計數。此計數僅為近似值,因為只能在隊列服務響應您的請求後添加或刪除消息。getApproximateMethodCount 方法返回通過調用 downloadAttributes 檢索到的最後一個值,而不會調用隊列服務。
// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);
// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");
// Download the approximate message count from the server
queue.downloadAttributes();
// Retrieve the newly cached approximate message count
long cachedMessageCount = queue.getApproximateMessageCount();
如何:刪除隊列
若要刪除隊列及其包含的所有消息,請對隊列對象調用 delete 方法。
// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);
// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");
// Delete the queue
queue.delete();
4. redis mq 隊列服務解決什麼問題
1. redis中保存的是數組(序列化),絕對不要保存SQL,保存SQL的方法很蛋疼 保存數組是為了資料庫安全版(萬一sql語句權有錯誤,任務就直接失敗了),靈活度和兼容性
2.伺服器後台作一個shell腳本,死循環,不斷從隊列中取數據,進行處理.如次反復,如果沒有數據,也立即嘗試取數據---不要擔心性能問題,後台單並發請求,不會造成性能問題
3.因為隊列中保存的是數組,不存在這個問題
5. win10開機自啟系統消息隊列服務可不可以禁止
可以關閉的,你也可以在管理Windows功能哪裡將它禁用就可以了,不影響電腦運作的。
6. 消息服務和消息隊列有何區別
消息隊列(Message Queue)是基於高可用分布式集群技術,搭建了包括發布訂閱、接回入、管理、答監控報警等一套完整的高性能消息雲服務。
消息通知服務(Message and Notification Service)是一種高效、可靠、安全、便捷、可彈性擴展的分布式消息服務。
7. 如何應用.NET中的消息隊列服務
建立一個隊列是應用的第一步。您可以通過Windows計算機管理控制台中的消息隊列選項完成這一操作,或者自己編程建立一個隊列。列表A中的C#代碼建立了一個新的私有MSMQ消息隊列(如果不存在隊列),並同時創建一條消息。
代碼應用MessageQueue類的Exists方法來確定是否存在一個名為TechRepublic的私有隊列。如存在,它用現有隊列示例這個MessageQueue對象;否則,就建立一個新隊列。 新的Message對象用來向隊列發送一條消息。它的Label屬性指定在MSMQ控制台中顯示的消息標題,其主體包含存放在隊列上的項目內容。在這種情況下,我只發送文本,但您能夠使用任何類型的對象。MessageQueue類的Send方法向隊列發送消息。列表B中是對應的VB.NET代碼。 下一步即從隊列中讀取消息。這是一個簡單的過程,應用MessageQueue類的Receive方法即可。如果隊列中存在消息,Receive方法就返回一個消息對象;否則,它等待一條消息出現(您可以設置一個時間期限)。從隊列中恢復對象需要預先知道它的類型。 MessageQueue類的Formatter屬性允許您輕松指定被恢復對象的類型。下面的簡單例子僅使用文本,所以它應用System.String。在列表C中,C#代碼從測試隊列中讀取消息。 提交給Receive方法的TimeSpan對象指定異常出現時系統的等待時間。接下來設置這個例子中的Formatter方法,對象被轉換成字元串讀取前面存儲的文本。Receive方法從隊列中讀取消息,它的值顯示在控制台中。在try塊的最後部分,隊列關閉。 輕松應用消息 MSMQ組合Windows和.NET的System.Messaging命名空間,使您可以方便地在.NET應用程序中利用消息。消息提供一種在企業應用程序中非同步發送並接收消息(數據)的強大工具。