Windows Server用のルームサービスバスをセットアップする





多くの場合、複数の異種システムをリンクするか、それらの同期を確保する必要があります。 もちろん、ケースは異なりますが、独自のソリューションを作成することは、通常、時間とリソースの両方で非常に高価です。



深刻な企業の中で、おそらく、Amazon(SQS)とMicrosoft(Service Bus)のクラウドソリューションを区別できます。 ただし、パブリッククラウドは急速に発展していますが、そのようなソリューションは常にオンプレミスと呼ばれるものではありません。 言い換えれば、そのようなソリューションが必要ですが、私たち自身の閉じた領域にあります。 これに関して、MicrosoftはService Busをプライベートクラウドで、または少なくともWindows 7以降がインストールされた1台のマシンで利用できるようにすることにより、有能な一歩を踏み出しました。 Service Bus 1.0では、PowerShellによる管理が利用可能でしたが、リリース1.1では、Azure Packコンソールに統合できるようになりました。



この記事では、Windows ServerのService Busを構成するプロセスについて、可能な限り詳細に写真で説明します。 異なるソースの部分を数回読むよりも、プロセス全体を一度見る方が良いためです。



注意トラフィック! カットの下にたくさんの写真。



したがって、 Azure Service Busはクラウドベースのユニバーサルメッセージングシステムです。



どんな機能を持っているかを理解するために、カテゴリMessagingからいくつかのパターンを思い出します 。

私の主観的な意見では、この主題に関する最高の本の1つは、 エンタープライズ統合パターンです。メッセージングソリューションの設計、構築、および展開 (翻訳: エンタープライズアプリケーション統合テンプレート )は、次のパターンをもたらします。



ポイントツーポイントチャネル



ポイントツーポイントチャネルにより、個々のメッセージが1人の受信者のみによって消費されることが保証されます。 チャネルでは、多数の受信者が同時にメッセージを処理できますが、特定のメッセージを受信できるのはそのうちの1人だけです。 複数の受信者が同時にメッセージを消費しようとすると、チャネルはそのうちの1人だけが成功するように注意します。 受信者はアクションを調整する必要はありません。



ポイントツーポイントチャネルに受信者が 1人しかいない場合、メッセージは1回だけ消費されます。 チャネルが複数の受信者によってリッスンされている場合、それらは競合するコンシューマになり、チャネルはそのうちの1人のみがメッセージを受信するようにします。 チャネルごとのワークロードは、複数のコンピューター上の複数のアプリケーション内で実行される複数のコンシューマーに分散できるため、このメッセージ消費と処理のパターンは完全にスケーリングされます。



メッセージを受信するのではなく、チャネルを聴いているすべての受信者がメッセージを受信する必要がある場合は、パブリッシュ/サブスクライブチャネルを使用します 。







パブリッシュ/サブスクライブチャネル



パブリケーション-サブスクリプションチャネルは次のように動作します。1つの入力チャネルがあり、各サブスクライバに1つずつ、複数の出力チャネルに分割されています。 メッセージがチャネルで公開されると、パブリッシュ/サブスクライブチャネルはメッセージのコピーを各出力チャネルに配信します。 チャネルの各「出力」には、メッセージを1回だけ消費できるサブスクライバーが1人だけいます。 このため、各サブスクライバーはメッセージを1回だけ受信します。その後、消費されたメッセージのコピーは対応する出力チャネルから消えます。







無効なメッセージチャネル



誤った形式のメッセージ、またはこのチャネルに必要なフィールドが含まれていないメッセージは、正しく処理できませんが、正式には配信されます。 この場合、受信者はこれらのメッセージを無効なメッセージのチャネルに移動して、その後の問題の診断に使用できます 。



無効なメッセージを処理する手段がない場合:







無効なメッセージのチャネルがある場合 :







多くのメッセージングシステムは、 dead-letter channelと呼ばれる同様の概念を実装しています 。 正常に配信および受信されたが処理されなかったメッセージを含む無効なメッセージチャネルとは異なり、 デッドレターチャネルは、メッセージングシステムによって配信できなかったメッセージ用です。



デッドレターチャンネル



メッセージングシステムは、メッセージを配信できないと判断したら、メッセージの処理方法を決定する必要があります。 メッセージを削除するか、デッドレターチャネルにリダイレクトできます。







配送保証



配信保証とは、非同期モードで受信者にメッセージを送信し、受信の成功または配信不能の正しい通知のみを保証する機能を意味すると理解されています。







メッセージバス



メッセージバスは、標準的なデータモデル、コマンドの標準セット、および異なるシステムが共通のインターフェイスセットを介して相互に通信できるメッセージングインフラストラクチャの組み合わせです。







Azure Service Busは、上記のすべてのパターンを実装します。







今、私たちは話していることを理解しています。 論理的な質問は、「私は同じことをすることができますが、私の領土の机で?」







はい、できます。完全に無料です。 Service Busを開始するには、Windows 7以降とMS SQL Server 2012 Expressのみが必要です。

Azure Packの使いやすいグラフィカルインターフェイスを介してService Busを管理する場合は、Windows Server 2012+が必要です。



Microsoft Web Platform InstallerからWindows Server 1.1用のService Busをダウンロードできます。



Azure Packは 、ここ (Windows Azure Packのインストール:ポータルとAPI Express)から、または直接リンク からダウンロードできます。



どのように機能しますか?



Service Busは、データベースを使用してインフラストラクチャデータとメッセージコンテナを保存します(メッセージはそれらの間で均等に分散されます)。 データベースサーバーとService Bus は 、異なるマシンに配置できます 。



Azure Packを使用して、Webインターフェイスを介してService Busを管理できます。 Azure Pack は別のマシンに配置することもできますが、仕事のためにはユーザーに関するデータなどを保存するデータベースも必要です。



この例では、インターネットでハングする3つの仮想マシンをデプロイします。



すべて同じものを1台のマシンに展開できます。



更新された管理ポータルを使用して、Microsoft Azureに仮想マシンを作成します。



Service BusとAzure Packの設定について読み始める前に、公式リソースの用語を理解することを強くお勧めします。



データベースを使用した仮想マシンのセットアップ



データベースを使用した仮想マシンのセットアップ
ホスト名と管理者アカウント情報を入力してください







時間と自動更新を設定する







仮想ネットワークを作成します:hello-habr-db







外部IPアドレスを予約します:hello-habr-db







データベースが外部で動作するようにポートを開きましょう







ロシアに近い地理的位置を示します







Azureが仮想マシンを作成している間、しばらく待ちましょう。 その後、詳細な情報を受け取ります。







これで、必要なソフトウェアのインストールを開始できます。



1)Microsoft SQL Server 2014 Express 英語(!) (ところで、既に10 GBを提供しています)

2)Management Studio 2014



これを行う前に、次を実行します。



1).NET Framework 3.5をインストールします







2)ファイアウォールをオフにします(実験を完了するためにこれを自分で繰り返さないでください )







MS SQL Serverをインストールするとき、 混合認証モードを選択する必要があります (これは重要です)







インストール後、外部で動作するようにMS SQL Serverを構成します











この仮想マシンは準備ができています。 再起動することを忘れないでください。





Windows ServerのService Busを使用して仮想マシンを構成する



Windows ServerのService Busを使用して仮想マシンを構成する
ホスト名と管理者アカウント情報を入力してください







仮想ネットワークを作成します:hello-habr- s b







外部IPアドレスを予約します:hello-habr- s b







別のストレージアカウントを作成しましょう(これは重要ではありませんが):hellohabr s b







Service Busの機能と、Azure Packへのアクセス用の印象的なポートのリストを開きます







仮想マシンを取得する







ファイアウォールをオフにします(実験を完了するためにこれを自分で繰り返さないでください )







Microsoft Webプラットフォームのインストーラーを実行し、検索でService Bus 1.1を見つけます







2つのポイントを選択して、インストールをクリックします







次に、コマンドライン経由でmakecert.exeユーティリティを使用して、(インターネット上の別のマシン上のクライアントから)Windows ServerのService Busへのアクセス証明書を生成します。 Windows 8.1では、通常、次のディレクトリにあります。

C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.1A \ Bin



makecert.exe -r -pe -n "CN=hello-habr-sb.cloudapp.net, CN=hello-habr-sb" -e 11/11/2022 -eku 1.3.6.1.5.5.7.3.2 -ss My -sr "LocalMachine" -sky Exchange -a sha256 -sy 24 -len 2048 "hello-habr-sb.cloudapp.net.cer"
      
      





ファイルhello-habr-sb.cloudapp.net.cerを取得します。 サーバーおよびクライアントのService Busの証明書-ローカルコンピューター(信頼されたルートCA)にインストールします 。











これで、Service Busを構成する準備がすべて整いました。 Service Bus Configurationを起動します 。



カスタム設定に興味があります







データベースでhello-habr-db.cloudapp.netを使用して仮想マシンのDNS名を指定します。 接続を確認してください。







メッセージを処理するコンテナの数を設定し、パスワードを入力します







証明書として、以前に生成されたhello-habr-sb.cloudapp.net.cerを選択します







ポートを9000から10000に変更します











Azure Packポータルを介してこのファームを管理するボックスをオンにします。 管理者ポータルとテナントポータルのパスワードを指定する







すべてのアクションが正しく行われた場合、すべてが正常であると通知されます







次に、Service Bus Farm(SBFarm)のDNS名を変更する必要があります(これは、クライアントが別のマシンからインターネットにアクセスできるようにするために必要です)。 これは、 Service Bus PowerShellを使用して(管理者特権で)実行できます。 コマンドのシーケンスを実行します。



 Get-SBFarm Stop-SBFarm –Verbose Set-SBFarm -FarmDns 'hello-habr-sb.cloudapp.net' Update-SBHost –Verbose Start-SBFarm –Verbose
      
      





( Start-SBFarmには非常に長い時間がかかりますが、 それで問題ありません )



.NETクライアントを介したその後のヘルスチェックでは、以前に作成したServiceBusDefaultNamespaceにSASキーを割り当てます。



 New-SBAuthorizationRule -NamespaceName ServiceBusDefaultNamespace -Name MainRule -Rights Manage, Send, Listen
      
      





応答として、次のものを取得します。



 KeyName : MainRule PrimaryKey : ylF6GWmH6rlZg1ekQMQrLQnht4kwVFWHAfyB8HkrZvM= SecondaryKey : ZYBpdiCYgZNfwOC37x6DEDLxhv+qan6CJZT0vG3GvTk= Rights : {Manage, Send, Listen} CreatedTime : 3/22/2015 12:53:23 AM ModifiedTime : 3/22/2015 12:53:23 AM ConnectionString : Endpoint=sb://hello-habr-sb.cloudapp.net/ServiceBusDefaultNamespace; StsEndpoint=https://hello-habr-sb.cloudapp.net:10355/ServiceBusDefaultNamespace; RuntimePort=10354; ManagementPort=10355; SharedAccessKeyName=MainRule; SharedAccessKey=ylF6GWmH6rlZg1ekQMQrLQnht4kwVFWHAfyB8HkrZvM=
      
      





このマシンでの最後のアクション: ホストファイルにエントリを追加します

(C:\ Windows \ System32 \ドライバー\など)



 127.0.0.1 hello-habr-sb.cloudapp.net
      
      





では、3番目のマシンでAzure Packをセットアップしてみましょう。





Azure Packを使用して仮想マシンを構成する



Azure Packを使用して仮想マシンを構成する
ホスト名と管理者アカウント情報を入力してください







仮想ネットワークを作成します:hello-habr- wap







外部IPアドレスを予約します:hello-habr- wap







別のストレージアカウントを作成します(これは重要ではありませんが):hellohabr wap







Azure Pack管理ポータルにアクセスするためのポートを開きましょう







仮想マシンを取得する







また、Azure Packはデータをデータベースに格納します。そのロジックをService Busロジックから分離するために、別のデータベースサーバーを作成しますが、既にこのマシン上にあります。 これを行うには、再び次のものが必要です。



1)Microsoft SQL Server 2014 Express 英語(!)

2)Management Studio 2014



インストールを開始する前に、次の手順を実行します。



1).NET Framework 3.5をインストールします







2)ファイアウォールをオフにします(実験を完了するためにこれを自分で繰り返さないでください )







MS SQL Serverをインストールするとき、 混合認証モードを選択する必要があります (これは重要です)







その後、Azure Pack管理ポータルが機能するようにIISを上げる必要があります。







IISの管理とセキュリティに関連するいくつかのコンポーネントもインストールします。























次に、デフォルト設定でAzure Packをインストールします。



インストール直後に、構成ポータルが開きます。
  https:// localhost:30101 / 


続行をクリックします。







Azure Packデータが保存されるデータベースを指定します







IISとデータベースがすべて正常であれば、実装の成功について通知されます。







次に、おなじみのユーティリティmakecert.exeとpvk2pfx.exeを使用して、Azure Packサイトへのアクセス証明書を生成する必要があります(そのため、証明書を持っている人のみがサイトにアクセスできます)

C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.1A \ Bin



サーバーの場合:



 makecert -r -pe -n "CN=WAP Portals" -ss CA -a sha1 -sky signature -cy authority -sv WAPPortals.pvk WAPPortals.cer makecert -pe -n "CN=hello-habr-wap.cloudapp.net" -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.1 -ic WAPPortals.cer -iv WAPPortals.pvk -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 -sv WAPLocalServer.pvk WAPLocalServer.cer pvk2pfx -pvk WAPLocalServer.pvk -spc WAPLocalServer.cer -pfx WAPLocalServer.pfx
      
      





顧客の場合:

 makecert -pe -n "CN=WAPMainDeveloper" -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.2 -ic WAPPortals.cer -iv WAPPortals.pvk -sv WAPClient.pvk WAPClient.cer pvk2pfx -pvk WAPClient.pvk -spc WAPClient.cer -pfx WAPClient.pfx -po HelloHabr2015
      
      





サーバー上の証明書-ローカルコンピューター(信頼されたルートCA)にWAPPortals.cerをインポートします。







サーバー上のIISにWAPLocalServer.pfxをインポートします。







私の場合、パスワードを設定しませんでした。







サーバーとクライアントの証明書-ローカルコンピューターと現在のユーザー(個人)にWAPClient.pfxをインストールします。



hostsファイルにエントリを追加します

(C:\ Windows \ System32 \ドライバー\など)



 127.0.0.1 hello-habr-wap.cloudapp.net
      
      





PowerShell(管理者権限)を使用して、Azure Pack管理サイトのFQDN名を変更できます(インターネットからサイトにアクセスするために必要です)。



TenantSiteの場合



 Import-Module -Name MgmtSvcConfig Set-MgmtSvcFqdn -Namespace "TenantSite" -FullyQualifiedDomainName "hello-habr-wap.cloudapp.net" -Port 30081 -Server "hello-habr-wap\SQLEXPRESS" Set-MgmtSvcFqdn -Namespace "AuthSite" -FullyQualifiedDomainName "hello-habr-wap.cloudapp.net" -Port 30071 -Server "hello-habr-wap\SQLEXPRESS" Set-MgmtSvcRelyingPartySettings -Target Tenant -MetadataEndpoint "https://hello-habr-wap.cloudapp.net:30071/FederationMetadata/2007-06/FederationMetadata.xml" -ConnectionString "Data Source=hello-habr-wap\SQLEXPRESS;User ID=sa;Password=HelloHabr2015" –DisableCertificateValidation Set-MgmtSvcIdentityProviderSettings -Target Membership -MetadataEndpoint "https://hello-habr-wap.cloudapp.net:30081/FederationMetadata/2007-06/FederationMetadata.xml" -ConnectionString "Data Source=hello-habr-wap\SQLEXPRESS;User ID=sa;Password=HelloHabr2015" –DisableCertificateValidation
      
      





adminminの場合



 Import-Module -Name MgmtSvcConfig Set-MgmtSvcFqdn -Namespace "AdminSite" -FullyQualifiedDomainName "hello-habr-wap.cloudapp.net" -Port 30091 -Server "hello-habr-wap\SQLEXPRESS" Set-MgmtSvcFqdn -Namespace "WindowsAuthSite" -FullyQualifiedDomainName "hello-habr-wap.cloudapp.net" -Port 30072 -Server "hello-habr-wap\SQLEXPRESS" Set-MgmtSvcRelyingPartySettings -Target Admin -MetadataEndpoint "https://hello-habr-wap.cloudapp.net:30072/FederationMetadata/2007-06/FederationMetadata.xml" -ConnectionString "Data Source=hello-habr-wap\SQLEXPRESS;User ID=sa;Password=HelloHabr2015" –DisableCertificateValidation Set-MgmtSvcIdentityProviderSettings -Target Windows -MetadataEndpoint "https://hello-habr-wap.cloudapp.net:30091/FederationMetadata/2007-06/FederationMetadata.xml" -ConnectionString "Data Source=hello-habr-wap\SQLEXPRESS;User ID=sa;Password=HelloHabr2015" –DisableCertificateValidation
      
      





IISのAzure Packサイトの設定で、バインドを変更します







証明書として、 hello-habr-wap.cloudapp.netを選択します-WAPポータル











サイトのSSL設定で-インストールSSLが必要











サイトに対してこの手順を繰り返します。



-テナントサイト

-AuthSite

-管理者

-WindowsAuthSite



記事で説明されている方法( 1、2、および3)を使用して、使いやすいDNS名を作成できます。



素晴らしい、フィニッシュラインに到達しました。 次に、 hello-habr-sb.cloudapp.netにあるService Busへのアクセスを構成する必要があります。







AdminSiteに行きましょう:

  https://hello-habr-wap.cloudapp.net {0091 


Service Busを使用して仮想マシンに接続する







計画を作成する















最後に、ユーザーを作成します















サービスバスの確認



サービスバスの確認
TenantSiteに移動し、作成されたユーザーの資格情報を入力します

  https://hello-habr-wap.cloudapp.nethaps0081/ 






名前空間を作成する







トピックを作成



















サブスクリプションを作成する















トピックの共有アクセスポリシーを作成する







アクセス用のキーを取得する







これですべての検証の準備ができました



簡単なコンソールアプリケーションを作成しましょう。 これにはVisual Studio 2013を使用します。







NuGet Package Managerコンソールを使用して必要な参照を追加します



 Install-Package ServiceBus.v1_1
      
      





そして、少し検証コードを書きます



 using Microsoft.ServiceBus; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.ServiceBus.Messaging; namespace TestHelloHabrServiceBus { class Program { static string ServerFQDN; static int HttpPort = 10355; static int TcpPort = 10354; static string ServiceNamespace = "HelloHabrNamespace"; static void Main(string[] args) { ServerFQDN = "hello-habr-sb.cloudapp.net"; ServiceBusConnectionStringBuilder connBuilder = new ServiceBusConnectionStringBuilder(); connBuilder.ManagementPort = HttpPort; connBuilder.RuntimePort = TcpPort; connBuilder.Endpoints.Add(new UriBuilder() { Scheme = "sb", Host = ServerFQDN, Path = ServiceNamespace }.Uri); connBuilder.StsEndpoints.Add(new UriBuilder() { Scheme = "https", Host = ServerFQDN, Port = HttpPort, Path = ServiceNamespace }.Uri); connBuilder.SharedAccessKeyName = "HelloHabrSAS"; connBuilder.SharedAccessKey = "CLoUUuoBgwzJ4502NWGNB4cUIn7IcBOpuB47q53K2So="; NamespaceManager namespaceManager = NamespaceManager.CreateFromConnectionString(connBuilder.ToString()); TopicClient topicClient = TopicClient.CreateFromConnectionString(connBuilder.ToString(), "HelloHabrTopic"); SubscriptionClient subscriptionClient = SubscriptionClient.CreateFromConnectionString( connBuilder.ToString(), "HelloHabrTopic", "HelloHabrSubscription", ReceiveMode.PeekLock); BrokeredMessage message = new BrokeredMessage("My Message"); //   try { topicClient.Send(new BrokeredMessage("My Message")); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.WriteLine(" "); //   message = subscriptionClient.Receive(TimeSpan.FromSeconds(10)); if (message != null) { Console.WriteLine("Body: " + message.GetBody<string>()); Console.WriteLine("MessageId: " + message.MessageId); message.Complete(); Console.WriteLine("The end of the message."); } Console.WriteLine("===================================="); Console.WriteLine("Program ends."); Console.ReadLine(); } } }
      
      





実行して、メッセージが送信および配信されることを確認します。











これらのソリューションの構成における私の経験が役に立ち、少し時間を節約できることを願っています。



All Articles