OracleAQMessageオブジェクトは、エンキューおよびデキューされるメッセージを表します。
クラスの継承
System.Object
OracleAQMessage
宣言
// C# public sealed class OracleAQMessage
要件
| プロバイダ | ODP.NET管理対象外ドライバ |
| アセンブリ | Oracle.DataAccess.dll |
| ネームスペース | Oracle.DataAccess.Client |
| .NET Framework | 3.5, 4.0, 4.5 |
スレッド安全性
パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。
備考
OracleAQMessageオブジェクトは、制御情報(メタデータ)とペイロード(データ)からなります。制御情報はOracleAQMessageオブジェクトの様々なプロパティによって公開され、Oracle Streamsアドバンスト・キューイングでメッセージの管理に使用されます。ペイロードはキューに格納される情報です。
|
注意: ペイロードがXmlReaderの場合、OracleAQQueueパブリック・メソッドのEnqueue()またはEnqueueArray()の複数の操作間でOracleAQMessageのインスタンスを再利用することはできません。これは、単純にXmlReaderが順方向専用のセマンティクスであり、Enqueue()またはEnqueueArray()の操作は、内部でXmlReaderの読取り操作を呼び出し、エンキュー対象のデータを抽出するためです。 |
OracleAQMessageメンバーを、次の各表に示します。
OracleAQMessageコンストラクタ
OracleAQMessageコンストラクタを、表12-14にリストします。
OracleAQMessageプロパティ
OracleAQMessageプロパティを、表12-15にリストします。
表12-15 OracleAQMessageプロパティ
| プロパティ | 説明 |
|---|---|
|
|
メッセージの識別情報を指定します。 |
|
|
エンキューされたメッセージがデキュー可能になるまでの期間(秒)を指定します。 |
|
|
デキューされたメッセージの配信モードを指定します。 |
|
|
メッセージのデキューを試みた回数を戻します。 |
|
|
メッセージがエンキューされた時間を指定します。 |
|
|
メッセージを正常に処理できない場合に、そのメッセージの移動先となるキューの名前を指定します。 |
|
|
エンキューされたメッセージがデキュー可能な期間(秒)を指定します。 |
|
|
メッセージ識別子を戻します。 |
|
|
このメッセージを生成した、最後のキュー内のメッセージの識別子を指定します。 |
|
|
メッセージのペイロードを指定します。 |
|
|
メッセージの優先順位を指定します。 |
|
|
デフォルトのキュー・サブスクライバに優先する受信者のリストを指定します。 |
|
|
メッセージの元の送信者を識別します。 |
|
|
デキュー時のメッセージの状態を指定します。 |
|
|
デキューされたメッセージのトランザクション・グループを指定します。 |
OracleAQMessageコンストラクタは、OracleAQMessageクラスの新規インスタンスを作成します。
オーバーロード・リスト:
このコンストラクタは、OracleAQMessageクラスをインスタンス化します。
このコンストラクタは、ペイロードとして指定されたオブジェクトを使用してOracleAQMessageクラスをインスタンス化します。
このコンストラクタは、payloadとして指定されたObjectを使用してOracleAQMessageクラスをインスタンス化します。
宣言
// C#
public OracleAQMessage(Object payload);
パラメータ
payload
payloadを指定するObject。次のタイプのいずれかです。
byte[ ]
IOracleCustomType
OracleBinary
OracleXmlType
String
XmlReader
例外
ArgumentException - 指定したpayload値のタイプが無効です。
備考
ODP.NETのAQ実装は現在、LOB属性を使用したユーザー定義タイプをサポートしていません。また、ユーザー定義タイプのその他のバリエーション(VARRAYやネスト表など)もサポートしていませんが、これはOracle Streams AQがこれらを元々サポートしていないためです。
OracleAQMessageプロパティを、表12-16にリストします。
表12-16 OracleAQMessageプロパティ
| プロパティ | 説明 |
|---|---|
|
|
メッセージの識別情報を指定します。 |
|
|
エンキューされたメッセージがデキュー可能になるまでの期間(秒)を指定します。 |
|
|
デキューされたメッセージの配信モードを指定します。 |
|
|
メッセージのデキューを試みた回数を戻します。 |
|
|
メッセージがエンキューされた時間を指定します。 |
|
|
メッセージを正常に処理できない場合に、そのメッセージの移動先となるキューの名前を指定します。 |
|
|
エンキューされたメッセージがデキュー可能な期間(秒)を指定します。 |
|
|
メッセージ識別子を戻します。 |
|
|
このメッセージを生成した、最後のキュー内のメッセージの識別子を指定します。 |
|
|
メッセージのペイロードを指定します。 |
|
|
メッセージの優先順位を指定します。 |
|
|
デフォルトのキュー・サブスクライバに優先する受信者のリストを指定します。 |
|
|
メッセージの元の送信者を識別します。 |
|
|
デキュー時のメッセージの状態を指定します。 |
|
|
デキューされたメッセージのトランザクション・グループを指定します。 |
このインスタンス・プロパティは、メッセージの識別情報を指定します。
宣言
// C#
public string Correlation {get;set;}
プロパティ値
メッセージの識別情報を指定するstring。
備考
メッセージのプロデューサは、エンキュー時にこのプロパティを設定できます。コンシューマは、OracleAQDequeueOptionsオブジェクトのCorrelationプロパティを設定することで、この識別情報を使用して特定のメッセージをデキューできます。Correlationに基づいたメッセージのデキューの詳細は、OracleAQDequeueOptionsクラスの「Correlation」を参照してください。
このインスタンス・プロパティは、エンキューされたメッセージがデキュー可能になるまでの期間(秒)を指定します。
宣言
// C#
public int Delay {get;set;}
プロパティ値
エンキューされたメッセージがデキュー可能になるまでの秒数を示すinteger。
例外
ArgumentException - 指定した値が0未満です。
備考
このプロパティにより、エンキューされたメッセージがただちに消費されるのを遅らせることができます。このプロパティの有効な値は次のとおりです。
正の整数 - 遅延時間(秒)を示します。
0 - メッセージがただちにデキュー可能になることを示します。
デフォルト値は0です。Delayプロパティは、バッファ・メッセージングではサポートされていません。
このインスタンス・プロパティは、デキューされたメッセージの配信モードを指定します。
宣言
// C#
public OracleAQMessageDeliveryMode DeliveryMode {get;}
プロパティ値
OracleAQMessageDeliveryModeの列挙値(OracleAQMessageDeliveryMode.PersistentまたはOracleAQMessageDeliveryMode.Buffered)。
このインスタンス・プロパティは、メッセージのデキューを試みた回数を戻します。
宣言
// C#
public int DequeueAttempts {get;}
プロパティ値
デキューの試行回数を示すinteger。
備考
このプロパティがOracleAQMessageで使用可能になるのは、メッセージがキューからデキューされた後です。
このインスタンス・プロパティは、メッセージがエンキューされた時間を指定します。
宣言
// C#
public DateTime EnqueueTime {get;}
プロパティ値
DateTimeオブジェクト。
備考
このプロパティが使用可能になるのは、メッセージがデキューされた後です。このプロパティにより、デキューされたメッセージのエンキュー時間が得られます。
このインスタンス・プロパティは、メッセージを正常に処理できない場合に、そのメッセージの移動先となるキューの名前を指定します。
宣言
// C#
public string ExceptionQueue {get;set;}
プロパティ値
メッセージを正常に処理できない場合に、そのメッセージの移動先となるキューの名前。デフォルト値はnullです。
備考
このプロパティは、メッセージが期限切れになったか、デキューに失敗した回数がキューのmax_retries値を超えた場合に、そのメッセージの移動先となるキューを指定します。
このプロパティが設定されていないか、指定した例外キュー名が存在しない場合は、キュー表に関連付けられているデフォルトの例外キューが使用されます。
このインスタンス・プロパティは、エンキューされたメッセージがデキュー可能な期間(秒)を指定します。
宣言
// C#
public int Expiration {get;set;}
プロパティ値
エンキューされたメッセージがデキュー可能な秒数を指定するinteger。
例外
ArgumentException - 指定した値が-1未満です。
備考
指定した値は、Delayプロパティに指定した値からのオフセットです。
このプロパティの有効な値は次のとおりです。
正の整数 - 有効期間(秒)を示します。
-1 - メッセージが期限切れにならないことを示します。
デフォルト値は-1です。期限切れになったメッセージは、READY状態からEXPIRED状態に移行します。
このインスタンス・プロパティは、メッセージ識別子を戻します。
宣言
// C#
public byte[] MessageId {get;}
プロパティ値
メッセージ識別子を指定するbyte[]。
備考
このプロパティが使用可能になるのは、エンキュー操作またはデキュー操作の後です。デキューされたバッファ・メッセージのMessageId値はnullです。
このインスタンス・プロパティは、このメッセージを生成した、最後のキュー内のメッセージの識別子を指定します。
宣言
// C#
public byte[] OriginalMessageId {get;}
プロパティ値
元のメッセージ識別子を指定するbyte[]。
このインスタンス・プロパティは、メッセージのペイロードを指定します。
宣言
// C#
public Object Payload {get;set;}
プロパティ値
メッセージのペイロードを指定するObject。
例外
ArgumentException - 指定したオブジェクトは使用可能なタイプの1つではありません。
備考
様々なペイロード・タイプの詳細は、OracleAQQueueクラスの「MessageType」を参照してください。
このインスタンス・プロパティは、メッセージの優先順位を指定します。
宣言
// C#
public int Priority {get;set;}
プロパティ値
メッセージの優先順位を指定するinteger。
備考
デフォルト値は0です。このプロパティを有効にするためには、メッセージのエンキュー前に設定しておく必要があります。
値が小さければ小さいほど、メッセージの優先順位は高くなります。負の値も使用できます。
エンキューされたメッセージの優先順位は、優先順位に基づいてデキューを行う際に役立ちます。
このインスタンス・プロパティは、デフォルトのキュー・サブスクライバに優先する受信者のリストを指定します。
宣言
// C#
public OracleAQAgent[] Recipients {get; set}
プロパティ値
OracleAQAgent[]。
備考
この受信者リストは、複数コンシューマ・キューにエンキューされるメッセージに対してのみ有効です。デキュー時のメッセージについては、受信者のリストは戻されません。
このインスタンス・プロパティは、メッセージの元の送信者を識別します。
宣言
// C#
public OracleAQAgent SenderId {get; set}
プロパティ値
OracleAQAgentオブジェクト。
備考
送信者の識別は、8.1以上のデータベース互換性レベルで作成されたすべてのキュー表でサポートされます。
このインスタンス・プロパティは、デキュー時のメッセージの状態を指定します。
宣言
// C#
public OracleAQMessageState State {get;}
プロパティ値
OracleAQMessageStateの列挙値。
備考
このプロパティが使用可能になるのは、メッセージがデキューされた後です。
デキュー・オプションのCorrelationを指定してデキューしたバッファ・メッセージの状態は、常にOracleAQMessageState.Readyです。
このインスタンス・プロパティは、デキューされたメッセージのトランザクション・グループを指定します。
宣言
// C#
public string TransactionGroup {get;}
プロパティ値
トランザクション・グループを指定するstring。
備考
このプロパティが設定されるのは、DequeueArrayをコールした後です。このプロパティは、Oracle Database 10g以上のデータベースを使用している場合にのみサポートされます。
1つのキューに属するメッセージをグループ化すると、1人のユーザーが一度に消費することのみが可能なセットを形成できます。そのためには、メッセージのグループ化が可能なキュー表にキューを作成する必要があります。1つのグループに属するメッセージはすべて、同じトランザクションで作成されたものである必要があります。また、1つのトランザクションで作成されたメッセージはすべて、同じグループに属します。