Service Bus Relay Endpointでロードバランスがサポートされました

2011年11月1日 | By TatsuakiSakai | Filed in: Micosoft Azure.

ご無沙汰しております。

ここの所、いろいろと細かいところでバタバタしておりまして、なかなかブログ記事を更新できませんでした。

思えば、9月の//build/カンファレンスでAppFabricのサービス バスV2の提供開始がアナウンスされ、AppFabric SDK 1.5が提供されていたことをアナウンスしなければ・・・と思いつつ1カ月以上が経過してしまいました。

以前このブログでご紹介したQueueやTopicの利用法もCTPとは異なっていますので、近々AppFabric SDK 1.5で動作するコードをご紹介したいと思っております。

さて、そんな中。従来のRelay機能にもUpdateがありました。

かねてよりサポートされるとの予告があった、Service Bus Relay Endpointのロードバランスが利用可能になっています。

これは、複数のリスナ(サービスの提供側)が1つのエンドポイントを共有し、リクエストを分散して実行することが可能な機能です。

Service Busのロードバランサは最大25のリスナを同一のエンドポイントに割り当てることが可能です。

従来、以下のようなコードを書いていると、既にOpenされているエンドポイントと同一のエンドポイントを割り当てようとした時点でAddressAlreadyInUseExceptionがスローされてしまいました。

 

Uri address = ServiceBusEnvironment.CreateServiceUri(“sb”, serviceNamespace, “MyService”);

ServiceHost host = new ServiceHost(typeof(MyService), address);

host.Open();

 

しかし、ロードバランサが提供されると最大25リスナまでは、例外が発生することなくエンドポイントが利用可能になっています。

※ただし、1つのリスナがアクセス制御を有効にしているなどといった、特定の条件下ではAddressAlreadyInUseExceptionがスローする場合があります。詳しくは以下のURL(英語)をご参照ください。

http://msdn.microsoft.com/en-us/library/hh148155.aspx

 

なお、25リスナを超えるリスナがエンドポイントを利用しようとした場合は、QuotaExceededExceptionがスローされます。

また、細かな変更点ですが、AppFabric SDK 1.5より、Relayエンドポイントの構成情報をmachine.configに書き込まないように変更されています。

したがって、App.configまたは、Web.configに構成情報を記述する必要があります。

 

<configuration>

<system.serviceModel>

<extensions>

<!– Adding all known service bus extensions. You can remove the ones you don’t need. –>

<behaviorExtensions>

<add name=”connectionStatusBehavior” type=”Microsoft.ServiceBus.Configuration.ConnectionStatusElement, Microsoft.ServiceBus, Version=1.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />

<add name=”transportClientEndpointBehavior” type=”Microsoft.ServiceBus.Configuration.TransportClientEndpointBehaviorElement, Microsoft.ServiceBus, Version=1.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />

<add name=”serviceRegistrySettings” type=”Microsoft.ServiceBus.Configuration.ServiceRegistrySettingsElement, Microsoft.ServiceBus, Version=1.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />

</behaviorExtensions>

<bindingElementExtensions>

<add name=”netMessagingTransport” type=”Microsoft.ServiceBus.Messaging.Configuration.NetMessagingTransportExtensionElement, Microsoft.ServiceBus, Version=1.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />

<add name=”tcpRelayTransport” type=”Microsoft.ServiceBus.Configuration.TcpRelayTransportElement, Microsoft.ServiceBus, Version=1.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />

<add name=”httpRelayTransport” type=”Microsoft.ServiceBus.Configuration.HttpRelayTransportElement, Microsoft.ServiceBus, Version=1.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />

<add name=”httpsRelayTransport” type=”Microsoft.ServiceBus.Configuration.HttpsRelayTransportElement, Microsoft.ServiceBus, Version=1.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />

<add name=”onewayRelayTransport” type=”Microsoft.ServiceBus.Configuration.RelayedOnewayTransportElement, Microsoft.ServiceBus, Version=1.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />

</bindingElementExtensions>

<bindingExtensions>

<add name=”basicHttpRelayBinding” type=”Microsoft.ServiceBus.Configuration.BasicHttpRelayBindingCollectionElement, Microsoft.ServiceBus, Version=1.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />

<add name=”webHttpRelayBinding” type=”Microsoft.ServiceBus.Configuration.WebHttpRelayBindingCollectionElement, Microsoft.ServiceBus, Version=1.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />

<add name=”ws2007HttpRelayBinding” type=”Microsoft.ServiceBus.Configuration.WS2007HttpRelayBindingCollectionElement, Microsoft.ServiceBus, Version=1.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />

<add name=”netTcpRelayBinding” type=”Microsoft.ServiceBus.Configuration.NetTcpRelayBindingCollectionElement, Microsoft.ServiceBus, Version=1.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />

<add name=”netOnewayRelayBinding” type=”Microsoft.ServiceBus.Configuration.NetOnewayRelayBindingCollectionElement, Microsoft.ServiceBus, Version=1.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />

<add name=”netEventRelayBinding” type=”Microsoft.ServiceBus.Configuration.NetEventRelayBindingCollectionElement, Microsoft.ServiceBus, Version=1.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />

<add name=”netMessagingBinding” type=”Microsoft.ServiceBus.Messaging.Configuration.NetMessagingBindingCollectionElement, Microsoft.ServiceBus, Version=1.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />

</bindingExtensions>

</extensions>

</system.serviceModel>

</configuration>

 

少々面倒な追記ではありますが、この記述を追加することで、サービスバスを利用するサービスのポータビリティも向上します。

もちろん、コード中でRelayバインディングを解決できるようにしておく方法も利用可能です。


Comments are closed here.