MessageQueue クラス
アセンブリ: System.Messaging (system.messaging.dll 内)
構文
Public Class MessageQueue Inherits Component Implements IEnumerable
public class MessageQueue : Component, IEnumerable
public class MessageQueue extends Component implements IEnumerable
public class MessageQueue extends Component implements IEnumerable
メッセージ キューの技術を使用すると、一時的にオフラインになる可能性のある異種ネットワークや異種システム間で、異なる時間に実行される複数のアプリケーションが相互に通信できます。アプリケーションは、キューからのメッセージを送信、受信、またはピーク (削除せずに読み取ること) します。メッセージ キューは Windows 2000 および Windows NT のオプションのコンポーネントです。個別にインストールする必要があります。
MessageQueue クラスは、メッセージ キューのラッパー クラスです。メッセージ キューには複数のバージョンがあり、使用しているオペレーティング システムによって MessageQueue クラスの動作が少し異なります。メッセージ キューの各バージョンにおける固有の機能の詳細については、MSDN のプラットフォーム SDK ドキュメントのトピック「What's New in Message Queuing」を参照してください。
MessageQueue クラスによりメッセージ キューのキューへの参照ができます。MessageQueue コンストラクタでパスを指定して既存のリソースに接続するか、サーバーに新しいキューを作成できます。Send(Object)、Peek、または Receive を呼び出す前に、MessageQueue クラスの新しいインスタンスを既存のキューに関連付ける必要があります。この時点で、Category や Label などのキュー プロパティの操作ができるようになります。
MessageQueue は、同期と非同期の 2 種類のメッセージ取得をサポートします。同期メソッドである Peek と Receive を使用して、プロセス スレッドは新しいメッセージがキューに到達するまで待機する時間間隔を指定します。非同期メソッドである BeginPeek と BeginReceive を使用すると、キューにメッセージが到達するまで、メイン アプリケーションのタスクは別のスレッドで継続します。これらのメソッドは、コールバック オブジェクトと状態オブジェクトを使用してスレッド間で情報を通信することによって動作します。
MessageQueue クラスの新しいインスタンスを作成するときに、新しいメッセージ キューのキューは作成されません。その代わりに、Create(String)、Delete、Purge の各メソッドを使用してサーバーのキューを管理できます。
Purge とは異なり、Create(String) と Delete は static メンバであるため、MessageQueue クラスの新しいインスタンスを作成せずに呼び出すことができます。
MessageQueue オブジェクトの Path プロパティには、表示名、FormatName、Label など、3 種類ある名前のうちの 1 つを設定できます。表示名とは、キューの MachineName プロパティと QueueName プロパティで定義される名前であり、パブリック キューの場合は MachineName \ QueueName、プライベート キューの場合は MachineName \ Private$ \ QueueName です。FormatName プロパティを使用すると、メッセージ キューにオフラインでアクセスできます。キューの Label プロパティを使用してキューの Path を設定することもできます。
MessageQueue のインスタンスの初期プロパティ値の一覧については、MessageQueue コンストラクタのトピックを参照してください。
さまざまな種類のパス名構文を使用して、新しい MessageQueue オブジェクトを作成するコード例を次に示します。いずれの場合も、コンストラクタでパスが定義されているキューにメッセージを送信します。
Imports System Imports System.Messaging Public Class MyNewQueue ' Provides an entry point into the application. ' ' This example demonstrates several ways to set ' a queue's path. Public Shared Sub Main() ' Create a new instance of the class. Dim myNewQueue As New MyNewQueue() myNewQueue.SendPublic() myNewQueue.SendPrivate() myNewQueue.SendByLabel() myNewQueue.SendByFormatName() myNewQueue.MonitorComputerJournal() myNewQueue.MonitorQueueJournal() myNewQueue.MonitorDeadLetter() myNewQueue.MonitorTransactionalDeadLetter() Return End Sub 'Main ' References public queues. Public Sub SendPublic() Dim myQueue As New MessageQueue(".\myQueue") myQueue.Send("Public queue by path name.") Return End Sub 'SendPublic ' References private queues. Public Sub SendPrivate() Dim myQueue As New MessageQueue(".\Private$\myQueue") myQueue.Send("Private queue by path name.") Return End Sub 'SendPrivate ' References queues by label. Public Sub SendByLabel() Dim myQueue As New MessageQueue("Label:TheLabel") myQueue.Send("Queue by label.") Return End Sub 'SendByLabel ' References queues by format name. Public Sub SendByFormatName() Dim myQueue As New _ MessageQueue("FormatName:Public=" + _ "5A5F7535-AE9A-41d4-935C-845C2AFF7112") myQueue.Send("Queue by format name.") Return End Sub 'SendByFormatName ' References computer journal queues. Public Sub MonitorComputerJournal() Dim computerJournal As New MessageQueue(".\Journal$") While True Dim journalMessage As Message = _ computerJournal.Receive() ' Process the journal message. End While Return End Sub 'MonitorComputerJournal ' References queue journal queues. Public Sub MonitorQueueJournal() Dim queueJournal As New _ MessageQueue(".\myQueue\Journal$") While True Dim journalMessage As Message = _ queueJournal.Receive() ' Process the journal message. End While Return End Sub 'MonitorQueueJournal ' References dead-letter queues. Public Sub MonitorDeadLetter() Dim deadLetter As New MessageQueue(".\DeadLetter$") While True Dim deadMessage As Message = deadLetter.Receive() ' Process the dead-letter message. End While Return End Sub 'MonitorDeadLetter ' References transactional dead-letter queues. Public Sub MonitorTransactionalDeadLetter() Dim TxDeadLetter As New MessageQueue(".\XactDeadLetter$") While True Dim txDeadLetterMessage As Message = _ TxDeadLetter.Receive() ' Process the transactional dead-letter message. End While Return End Sub 'MonitorTransactionalDeadLetter End Class 'MyNewQueue
using System; using System.Messaging; namespace MyProject { /// <summary> /// Provides a container class for the example. /// </summary> public class MyNewQueue { //************************************************** // Provides an entry point into the application. // // This example demonstrates several ways to set // a queue's path. //************************************************** public static void Main() { // Create a new instance of the class. MyNewQueue myNewQueue = new MyNewQueue(); myNewQueue.SendPublic(); myNewQueue.SendPrivate(); myNewQueue.SendByLabel(); myNewQueue.SendByFormatName(); myNewQueue.MonitorComputerJournal(); myNewQueue.MonitorQueueJournal(); myNewQueue.MonitorDeadLetter(); myNewQueue.MonitorTransactionalDeadLetter(); return; } // References public queues. public void SendPublic() { MessageQueue myQueue = new MessageQueue(".\\myQueue"); myQueue.Send("Public queue by path name."); return; } // References private queues. public void SendPrivate() { MessageQueue myQueue = new MessageQueue(".\\Private$\\myQueue"); myQueue.Send("Private queue by path name."); return; } // References queues by label. public void SendByLabel() { MessageQueue myQueue = new MessageQueue("Label:TheLabel"); myQueue.Send("Queue by label."); return; } // References queues by format name. public void SendByFormatName() { MessageQueue myQueue = new MessageQueue("FormatName:Public=5A5F7535-AE9A-41d4" + "-935C-845C2AFF7112"); myQueue.Send("Queue by format name."); return; } // References computer journal queues. public void MonitorComputerJournal() { MessageQueue computerJournal = new MessageQueue(".\\Journal$"); while(true) { Message journalMessage = computerJournal.Receive(); // Process the journal message. } } // References queue journal queues. public void MonitorQueueJournal() { MessageQueue queueJournal = new MessageQueue(".\\myQueue\\Journal$"); while(true) { Message journalMessage = queueJournal.Receive(); // Process the journal message. } } // References dead-letter queues. public void MonitorDeadLetter() { MessageQueue deadLetter = new MessageQueue(".\\DeadLetter$"); while(true) { Message deadMessage = deadLetter.Receive(); // Process the dead-letter message. } } // References transactional dead-letter queues. public void MonitorTransactionalDeadLetter() { MessageQueue TxDeadLetter = new MessageQueue(".\\XactDeadLetter$"); while(true) { Message txDeadLetter = TxDeadLetter.Receive(); // Process the transactional dead-letter message. } } } }
#using <system.dll> #using <system.messaging.dll> using namespace System; using namespace System::Messaging; ref class MyNewQueue { public: // References public queues. void SendPublic() { MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" ); myQueue->Send( "Public queue by path name." ); return; } // References private queues. void SendPrivate() { MessageQueue^ myQueue = gcnew MessageQueue( ".\\Private$\\myQueue" ); myQueue->Send( "Private queue by path name." ); return; } // References queues by label. void SendByLabel() { MessageQueue^ myQueue = gcnew MessageQueue( "Label:TheLabel" ); myQueue->Send( "Queue by label." ); return; } // References queues by format name. void SendByFormatName() { MessageQueue^ myQueue = gcnew MessageQueue( "FormatName:Public=5A5F7535-AE9A-41d4 -935C-845C2AFF7112" ); myQueue->Send( "Queue by format name." ); return; } // References computer journal queues. void MonitorComputerJournal() { MessageQueue^ computerJournal = gcnew MessageQueue( ".\\Journal$" ); while ( true ) { Message^ journalMessage = computerJournal->Receive(); // Process the journal message. } } // References queue journal queues. void MonitorQueueJournal() { MessageQueue^ queueJournal = gcnew MessageQueue( ".\\myQueue\\Journal$" ); while ( true ) { Message^ journalMessage = queueJournal->Receive(); // Process the journal message. } } // References dead-letter queues. void MonitorDeadLetter() { MessageQueue^ deadLetter = gcnew MessageQueue( ".\\DeadLetter$" ); while ( true ) { Message^ deadMessage = deadLetter->Receive(); // Process the dead-letter message. } } // References transactional dead-letter queues. void MonitorTransactionalDeadLetter() { MessageQueue^ TxDeadLetter = gcnew MessageQueue( ".\\XactDeadLetter$" ); while ( true ) { Message^ txDeadLetter = TxDeadLetter->Receive(); // Process the transactional dead-letter message. } } }; //************************************************* // Provides an entry point into the application. // // This example demonstrates several ways to set // a queue's path. //************************************************* int main() { // Create a new instance of the class. MyNewQueue^ myNewQueue = gcnew MyNewQueue; myNewQueue->SendPublic(); myNewQueue->SendPrivate(); myNewQueue->SendByLabel(); myNewQueue->SendByFormatName(); myNewQueue->MonitorComputerJournal(); myNewQueue->MonitorQueueJournal(); myNewQueue->MonitorDeadLetter(); myNewQueue->MonitorTransactionalDeadLetter(); return 0; }
package MyProject; import System.*; import System.Messaging.*; /// <summary> /// Provides a container class for the example. /// </summary> public class MyNewQueue { //************************************************** // Provides an entry point into the application. // // This example demonstrates several ways to set // a queue's path. //************************************************** public static void main(String[] args) { // Create a new instance of the class. MyNewQueue myNewQueue = new MyNewQueue(); myNewQueue.SendPublic(); myNewQueue.SendPrivate(); myNewQueue.SendByLabel(); myNewQueue.SendByFormatName(); myNewQueue.MonitorComputerJournal(); myNewQueue.MonitorQueueJournal(); myNewQueue.MonitorDeadLetter(); myNewQueue.MonitorTransactionalDeadLetter(); return; } //main // References public queues. public void SendPublic() { MessageQueue myQueue = new MessageQueue(".\\myQueue"); myQueue.Send("Public queue by path name."); return; } //SendPublic // References private queues. public void SendPrivate() { MessageQueue myQueue = new MessageQueue(".\\Private$\\myQueue"); myQueue.Send("Private queue by path name."); return; } //SendPrivate // References queues by label. public void SendByLabel() { MessageQueue myQueue = new MessageQueue("Label:TheLabel"); myQueue.Send("Queue by label."); return; } //SendByLabel // References queues by format name. public void SendByFormatName() { MessageQueue myQueue = new MessageQueue("FormatName:Public=5A5F7535-AE9A-41d4" + "-935C-845C2AFF7112"); myQueue.Send("Queue by format name."); return; } //SendByFormatName // References computer journal queues. public void MonitorComputerJournal() { MessageQueue computerJournal = new MessageQueue(".\\Journal$"); while (true) { Message journalMessage = computerJournal.Receive(); // Process the journal message. } } //MonitorComputerJournal // References queue journal queues. public void MonitorQueueJournal() { MessageQueue queueJournal = new MessageQueue(".\\myQueue\\Journal$"); while (true) { Message journalMessage = queueJournal.Receive(); // Process the journal message. } } //MonitorQueueJournal // References dead-letter queues. public void MonitorDeadLetter() { MessageQueue deadLetter = new MessageQueue(".\\DeadLetter$"); while (true) { Message deadMessage = deadLetter.Receive(); // Process the dead-letter message. } } //MonitorDeadLetter // References transactional dead-letter queues. public void MonitorTransactionalDeadLetter() { MessageQueue objTxDeadLetter = new MessageQueue(".\\XactDeadLetter$"); while (true) { Message txDeadLetter = objTxDeadLetter.Receive(); // Process the transactional dead-letter message. } } //MonitorTransactionalDeadLetter } //MyNewQueue
アプリケーション固有の Order というクラスを使用して、メッセージをキューに送信し、キューからメッセージを受信するコード例を次に示します。
Imports System Imports System.Messaging ' This class represents an object the following example ' sends to a queue and receives from a queue. Public Class Order Public orderId As Integer Public orderTime As DateTime End Class 'Order Public Class MyNewQueue ' ' Provides an entry point into the application. ' ' This example sends and receives a message from ' a qeue. ' Public Shared Sub Main() ' Create a new instance of the class. Dim myNewQueue As New MyNewQueue() ' Send a message to a queue. myNewQueue.SendMessage() ' Receive a message from a queue. myNewQueue.ReceiveMessage() Return End Sub 'Main ' ' Sends an Order to a queue. ' Public Sub SendMessage() ' Create a new order and set values. Dim sentOrder As New Order() sentOrder.orderId = 3 sentOrder.orderTime = DateTime.Now ' Connect to a queue on the local computer. Dim myQueue As New MessageQueue(".\myQueue") ' Send the Order to the queue. myQueue.Send(sentOrder) Return End Sub 'SendMessage ' ' Receives a message containing an Order. ' Public Sub ReceiveMessage() ' Connect to the a queue on the local computer. Dim myQueue As New MessageQueue(".\myQueue") ' Set the formatter to indicate the body contains an Order. myQueue.Formatter = New XmlMessageFormatter(New Type() _ {GetType(Order)}) Try ' Receive and format the message. Dim myMessage As Message = myQueue.Receive() Dim myOrder As Order = CType(myMessage.Body, Order) ' Display message information. Console.WriteLine(("Order ID: " + _ myOrder.orderId.ToString())) Console.WriteLine(("Sent: " + _ myOrder.orderTime.ToString())) Catch m As MessageQueueException ' Handle Message Queuing exceptions. Catch e As InvalidOperationException ' Handle invalid serialization format. Console.WriteLine(e.Message) ' Catch other exceptions as necessary. End Try Return End Sub 'ReceiveMessage End Class 'MyNewQueue
using System; using System.Messaging; namespace MyProject { // This class represents an object the following example // sends to a queue and receives from a queue. public class Order { public int orderId; public DateTime orderTime; }; /// <summary> /// Provides a container class for the example. /// </summary> public class MyNewQueue { //************************************************** // Provides an entry point into the application. // // This example sends and receives a message from // a queue. //************************************************** public static void Main() { // Create a new instance of the class. MyNewQueue myNewQueue = new MyNewQueue(); // Send a message to a queue. myNewQueue.SendMessage(); // Receive a message from a queue. myNewQueue.ReceiveMessage(); return; } //************************************************** // Sends an Order to a queue. //************************************************** public void SendMessage() { // Create a new order and set values. Order sentOrder = new Order(); sentOrder.orderId = 3; sentOrder.orderTime = DateTime.Now; // Connect to a queue on the local computer. MessageQueue myQueue = new MessageQueue(".\\myQueue"); // Send the Order to the queue. myQueue.Send(sentOrder); return; } //************************************************** // Receives a message containing an Order. //************************************************** public void ReceiveMessage() { // Connect to the a queue on the local computer. MessageQueue myQueue = new MessageQueue(".\\myQueue"); // Set the formatter to indicate body contains an Order. myQueue.Formatter = new XmlMessageFormatter(new Type[] {typeof(MyProject.Order)}); try { // Receive and format the message. Message myMessage = myQueue.Receive(); Order myOrder = (Order)myMessage.Body; // Display message information. Console.WriteLine("Order ID: " + myOrder.orderId.ToString()); Console.WriteLine("Sent: " + myOrder.orderTime.ToString()); } catch (MessageQueueException) { // Handle Message Queuing exceptions. } // Handle invalid serialization format. catch (InvalidOperationException e) { Console.WriteLine(e.Message); } // Catch other exceptions as necessary. return; } } }
#using <system.dll> #using <system.messaging.dll> using namespace System; using namespace System::Messaging; // This class represents an object the following example // sends to a queue and receives from a queue. ref class Order { public: int orderId; DateTime orderTime; }; /// <summary> /// Provides a container class for the example. /// </summary> ref class MyNewQueue { public: //************************************************* // Sends an Order to a queue. //************************************************* void SendMessage() { // Create a new order and set values. Order^ sentOrder = gcnew Order; sentOrder->orderId = 3; sentOrder->orderTime = DateTime::Now; // Connect to a queue on the local computer. MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" ); // Send the Order to the queue. myQueue->Send( sentOrder ); return; } //************************************************* // Receives a message containing an Order. //************************************************* void ReceiveMessage() { // Connect to the a queue on the local computer. MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" ); // Set the formatter to indicate body contains an Order. array<Type^>^p = gcnew array<Type^>(1); p[ 0 ] = Order::typeid; myQueue->Formatter = gcnew XmlMessageFormatter( p ); try { // Receive and format the message. Message^ myMessage = myQueue->Receive(); Order^ myOrder = static_cast<Order^>(myMessage->Body); // Display message information. Console::WriteLine( "Order ID: {0}", myOrder->orderId ); Console::WriteLine( "Sent: {0}", myOrder->orderTime ); } catch ( MessageQueueException^ ) { // Handle Message Queuing exceptions. } // Handle invalid serialization format. catch ( InvalidOperationException^ e ) { Console::WriteLine( e->Message ); } // Catch other exceptions as necessary. return; } }; //************************************************* // Provides an entry point into the application. // // This example sends and receives a message from // a queue. //************************************************* int main() { // Create a new instance of the class. MyNewQueue^ myNewQueue = gcnew MyNewQueue; // Send a message to a queue. myNewQueue->SendMessage(); // Receive a message from a queue. myNewQueue->ReceiveMessage(); return 0; }
package MyProject; import System.*; import System.Messaging.*; // This class represents an object the following example // sends to a queue and receives from a queue. public class Order { public int orderId; public DateTime orderTime; } //Order /// <summary> /// Provides a container class for the example. /// </summary> public class MyNewQueue { //************************************************** // Provides an entry point into the application. // // This example sends and receives a message from // a queue. //************************************************** public static void main(String[] args) { // Create a new instance of the class. MyNewQueue myNewQueue = new MyNewQueue(); // Send a message to a queue. myNewQueue.SendMessage(); // Receive a message from a queue. myNewQueue.ReceiveMessage(); return; } //main //************************************************** // Sends an Order to a queue. //************************************************** public void SendMessage() { // Create a new order and set values. Order sentOrder = new Order(); sentOrder.orderId = 3; sentOrder.orderTime = DateTime.get_Now(); // Connect to a queue on the local computer. MessageQueue myQueue = new MessageQueue(".\\myQueue"); // Send the Order to the queue. myQueue.Send(sentOrder); return; } //SendMessage //************************************************** // Receives a message containing an Order. //************************************************** public void ReceiveMessage() { // Connect to the a queue on the local computer. MessageQueue myQueue = new MessageQueue(".\\myQueue"); // Set the formatter to indicate body contains an Order. myQueue.set_Formatter(new XmlMessageFormatter(new Type[] { MyProject.Order.class.ToType() })); try { // Receive and format the message. Message myMessage = myQueue.Receive(); Order myOrder = (Order)(myMessage.get_Body()); // Display message information. Console.WriteLine("Order ID: "+((Int32)myOrder.orderId).ToString()); Console.WriteLine("Sent: " + myOrder.orderTime.ToString()); } catch (MessageQueueException exp) { // Handle Message Queuing exceptions. } // Handle invalid serialization format. catch (InvalidOperationException e) { Console.WriteLine(e.get_Message()); } // Catch other exceptions as necessary. return; } //ReceiveMessage } //MyNewQueue
System.MarshalByRefObject
System.ComponentModel.Component
System.Messaging.MessageQueue
プラットフォーム
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
参照
MessageQueue メンバ
System.Messaging 名前空間
Message クラス
DefaultPropertiesToSend クラス
MessageQueueException
MessageQueue
Peek
Receive
BeginPeek
BeginReceive
Path
Label
FormatName
QueueName
MachineName
Weblioに収録されているすべての辞書からMessageQueue クラスを検索する場合は、下記のリンクをクリックしてください。
全ての辞書からMessageQueue クラスを検索
- MessageQueue クラスのページへのリンク