Windows Azure AppFabricサービスバスの新たなCTPではQueueとTopicによるメッセージングがサポートされています。
これにより、Windows Azure AppFabricサービスバスは従来からのWCFのRelayバインディング以外にメッセージングによる非同期型連携が追加され、より多様な利用シナリオに対応できるようになりました。
QueueおよびTopicでは256KB以下のシリアライズ可能なオブジェクトをメッセージとして送信することができます。そのため、ListやArrayでコレクションされたオブジェクトもそのまま送信することが可能です。
以下にQueueにメッセージを送信するコードの例をご紹介します。
Uri m_BaseAddress;
string m_Issuer = “owner”;
string m_SharedKey = “*************** Your Secret Key ****************”;
SharedSecretCredential m_ManagementCredential;
ServiceBusNamespaceClient m_NamespaceClient;
MessagingFactory m_MessagingFactory;
QueueClient m_QueueClient;
void Page_Load(object sender, EventArgs e)//サービスバスのBaseAddressを生成
m_BaseAddress
= ServiceBusEnvironment.CreateServiceUri(“sb”, “yournamespace”, string.Empty);
//資格情報の作成
m_ManagementCredential
= TransportClientCredentialBase.CreateSharedSecretCredential(
m_Issuer, m_SharedKey);
//NamespaceClientの作成
m_NamespaceClient =
new ServiceBusNamespaceClient(m_BaseAddress, m_ManagementCredential);
//MessageingFactoryの作成
m_MessagingFactory
= MessagingFactory.Create(m_BaseAddress, m_ManagementCredential);
//Queueの初期化
Queue qPOQueue;
try
{
//Queueの作成
qPOQueue = m_NamespaceClient.CreateQueue(“POQueue”);
}
catch (MessagingEntityAlreadyExistsException) { } //すでに当該Queueが存在する場合
//Queueクライアントの作成
m_QueueClient = m_MessagingFactory.CreateQueueClient(“POQueue”);
//QueueクライアントからMesseageSenderを作成
MessageSender ms = m_QueueClient.CreateSender();
//メッセージの送信
BrokeredMessage bm
= BrokeredMessage.CreateMessage(
new PurchaseOrder(“20110623001”, “SLCYCLE”));
bm.Properties[“Remarks”] =“プロパティも追加できます。“;
ms.Send(bm);
メッセージングにおいても、従来のRelay Bindingの利用と同様に、Shared Secretによる認証が必要です。
また、あらかじめサービスバスのエンドポイントのURIを作成しておきます。
ここでポイントとなるAPIが2種類あります。1つがServiceBusNamespaceClientです。このライブラリはQueueの作成や削除を実行することが可能です。
もう1つがMessagingFactoryです。このライブラリは、メッセージを送受信するためのQueueClientを作成するために必要となります。
これらのライブラリは直接連携することはありませんが、ServiceBusNamespaceClientを用いて作成されたQueueに関連付けるQueueClientはMessagingFactoryから生成されます。
QueueClientはMessageSenderを作成します。MessageSenderはメッセージを送信するためのライブラリです。
名前から想像するとMessageReceiverが存在するであろうことは容易に想像できるでしょう。事実、Queueからメッセージを受信するためのライブラリとしてMessageReceiverが存在します。以下のコードはメッセージを受信する例です。
MessageReceiver mr = m_QueueClient.CreateReceiver();
BrokeredMessage bm = BrokeredMessage.CreateMessage();
if (mr.TryReceive(TimeSpan.FromSeconds(2), out bm) == true)
{
MessageBox.Show(bm.GetBody<PurchaseOrder>().ToString());
mr.Complete(bm);
}
QueueのメッセージはBrokeredMessage型のメッセージとして送信します。メッセージはBrokeredMessageのCreateMessageスタティックメソッドで作成します。
この時、引数にシリアライズしたいオブジェクトを指定することでメッセージにオブジェクトを含めることが可能です。
それ以外にもBrokeredMessageにはPropertyやLabelといった追加情報を付加することが可能です。
以下のブロックダイアグラムは、各ライブラリの関係を示したものです。
Windows Azure AppFabricサービスバスのQueueはWindows AzureストレージのQueueと比較しても、送信できるメッセージ長およびメッセージの型に柔軟性があるため、多くの場面で利用されることが期待されるサービスです。
この流れがある程度理解できれば、Topicの理解も容易になります。
折を見て、Topicについても触れたいと思います。
Comments are closed here.