久久―日本道色综合久久,亚洲欧美精品在线,狼狼色丁香久久婷婷综合五月,香蕉人人超,日本网站黄,国产在线观看不卡免费高清,无遮挡的毛片免费

2023信創(chuàng)獨角獸企業(yè)100強
全世界各行各業(yè)聯(lián)合起來,internet一定要實現(xiàn)!

ASP.NET高級應用

2004-02-16 eNet&Ciweek

  使用MSMQ

  MSMQ(MicroSoft Message Queue,微軟消息隊列)是在多個不同的應用之間實現(xiàn)相互通信的一種異步傳輸模式,相互通信的應用可以分布于同一臺機器上,也可以分布于相連的網(wǎng)絡空間中的任一位置。它的實現(xiàn)原理是:消息的發(fā)送者把自己想要發(fā)送的信息放入一個容器中(我們稱之為Message),然后把它保存至一個系統(tǒng)公用空間的消息隊列(Message Queue)中;本地或者是異地的消息接收程序再從該隊列中取出發(fā)給它的消息進行處理。

  在消息傳遞機制中,有兩個比較重要的概念。一個是消息,一個是隊列。消息是由通信的雙方所需要傳遞的信息,它可以是各式各樣的媒體,如文本、聲音、圖象等等。消息最終的理解方式,為消息傳遞的雙方事先商定,這樣做的好處是,一是相當于對數(shù)據(jù)進行了簡單的加密,二則采用自己定義的格式可以節(jié)省通信的傳遞量。消息可以含有發(fā)送和接收者的標識,這樣只有指定的用戶才能看到只傳遞給他的信息和返回是否操作成功的回執(zhí)。消息也可以含有時間戳,以便于接收方對某些與時間相關的應用進行處理。消息還可以含有到期時間,它表明如果在指定時間內(nèi)消息還未到達則作廢,這主要應用與時間性關聯(lián)較為緊密的應用。

  消息隊列是發(fā)送和接收消息的公用存儲空間,它可以存在于內(nèi)存中或者是物理文件中。消息可以以兩種方式發(fā)送,即快遞方式(express)和可恢復模式(recoverable),它們的區(qū)別在于,快遞方式為了消息的快速傳遞,把消息放置于內(nèi)存中,而不放于物理磁盤上,以獲取較高的處理能力;可恢復模式在傳送過程的每一步驟中,都把消息寫入物理磁盤中,以得到較好的故障恢復能力。消息隊列可以放置在發(fā)送方、接收方所在的機器上,也可以單獨放置在另外一臺機器上。正是由于消息隊列在放置方式上的靈活性,形成了消息傳送機制的可靠性。當保存消息隊列的機器發(fā)生故障而重新啟動以后,以可恢復模式發(fā)送的消息可以恢復到故障發(fā)生之前的狀態(tài),而以快遞方式發(fā)送的消息則丟失了。另一方面,采用消息傳遞機制,發(fā)送方必要再擔心接收方是否啟動、是否發(fā)生故障等等非必要因素,只要消息成功發(fā)送出去,就可以認為處理完成,而實際上對方可能甚至未曾開機,或者實際完成交易時可能已經(jīng)是第二天了。

  采用MSMQ帶來的好處是:由于是異步通信,無論是發(fā)送方還是接收方都不用等待對方返回成功消息,就可以執(zhí)行余下的代碼,因而大大地提高了事物處理的能力;當信息傳送過程中,信息發(fā)送機制具有一定功能的故障恢復能力;MSMQ的消息傳遞機制使得消息通信的雙方具有不同的物理平臺成為可能。

  在微軟的.net平臺上利用其提供的MSMQ功能,可以輕松創(chuàng)建或者刪除消息隊列、發(fā)送或者接收消息、甚至于對消息隊列進行管理。

  在.NET產(chǎn)品中,提供了一個MSMQ類庫"System.Messaging.dll"。它提供了兩個類分別對消息對象和消息隊列對象進行操作。在能夠使用MSMQ功能之前,你必須確定你的機器上安裝了MSMQ消息隊列組件,并確保服務正在運行中。在使用ASP.NET編程時,應在頭部使用:

  <%@ Assembly Name="System.Messaging"%>

 ?。?@ Import NameSpace="System.Messsaging"%>

  將MSMQ類庫引入ASP.NET文件

  1. 對消息隊列的創(chuàng)建

  dim MsgQue as MessageQueue

  MsgQue=New MessageQueue(MsgPath)

其中:MsgPath可以為本地私有隊列,如".\MyQueue",也可以為其他機器的公有隊列,如"Saidy\777$\MyQueue",Saidy為另一機器名。

  2. 消息的發(fā)送

  dim MsgQue as MessageQueue

  MsgQue.Send(Msg)

  其中:Msg為任一對象。

  3. 消息的接收

  消息的接收又分成同步和異步方式兩種,同步接收在規(guī)定時間內(nèi)從消息隊列中取出收到的第一條消息,當消息隊列中沒有消息時,程序處于等待狀態(tài);異步接收方式則是定義了一個事件處理函數(shù),當消息隊列中第一個消息到達時立即觸發(fā)該函數(shù)。

  1) 同步方式

   dim Msg as Message

  dim Fmt As XmlMessageFormatter

  Fmt= CType(MsgQue.Formatter,XmlMessageFormatter)

  Fmt.TargetTypeNames = new String(){"System.String"}

  Msg=MsgQue.receive(New TimeSpan(0,0,3))

  首先定義收到消息應轉換成的格式,然后在指定時間內(nèi)去接收消息

  2) 異步方式

dim Fmt As XmlMessageFormatter
'定義接收消息類型
Fmt = CType(MsgQue.Formatter,XmlMessageFormatter)
Fmt.TargetTypeNames = new String(){"System.String"}

'定義消息處理函數(shù)入口
AddHandler MsgQue.ReceiveCompleted, New ReceiveCompletedEventHandler
(AddressOf OnReceiveCompleted)

'定義消息處理函數(shù)
Public Shared Sub OnReceiveCompleted(s As Object, asyncResult As ReceiveAsyncEventArgs)
Dim MsgQue As MessageQueue = CType(s,MessageQueue)
Dim Msg As Message = MsgQue.EndReceive(asyncResult.AsyncResult)
'此時Msg.Body即為所取消息對象
MsgQue.BeginReceive()
'重新定義異步接收方式
End sub

'啟動異步接收方式
MsgQue.BeginReceive


  消息隊列配置屬性

  關于隊列的屬性

  path屬性:它可以決定引用隊列的三種方式,路徑引用、格式名引用、標識引用

  category屬性:標識當前使用的隊列的類型。Category是隊列所有者定義的GUID值。該GUID值可以有GUID生成工具產(chǎn)生或者是用戶自定義的數(shù)字值。GUID值不會唯一,這樣才可以根據(jù)相同的GUID值,把多個消息隊列劃分為不同的類別(category)。

  跟發(fā)送數(shù)據(jù)類型相關的屬性

  Formatter屬性:決定在一個隊列中如何發(fā)送和接收消息的順序,以及可以在一個消息中發(fā)送什么樣的內(nèi)容。

  和隊列交互相關的屬性

  DenyShareReceive屬性:決定同一時間內(nèi)只有一個部件能夠訪問消息隊列中的消息。

  CanRead和CanWrite屬性:決定隊列是否可以被讀取或者是寫入。

  MaximumQueueSize和MaximumJournalSize屬性:以千字節(jié)為單位設置一個隊列(日志隊列)的消息最大容納量。一旦接收的消息到達這個容量,新的消息將不再被接收。

  一般情況下,消息隊列的最大值為消息隊列管理員所設置,如果這個值沒有控制的話,那么缺省的消息隊列最大容量將是無限制的。

  UseJournalQueue屬性::設置是否將收到的消息拷貝到日志消息隊列中去。

相關頻道: eNews

您對本文或本站有任何意見,請在下方提交,謝謝!

投稿信箱:tougao@enet16.com