2017-07-03 40 views
0

我製作了可靠的服務應用程序,該應用程序在本地羣集上完美工作。如何設置可靠的服務以在Azure遠程羣集上工作

它有1個無狀態服務和1個演員服務,都使用服務遠程處理。 終點都不在這些服務(僅端點名稱)和服務都使用默認的監聽器定義(沒有CreateServicesListeners覆蓋) 客戶端應用程序是使用遠程服務與應用(ActorProxy和ServiceProxy),以comunicate一個控制檯應用程序。

現在我想將它部署在Azure羣集上。

我應該如何讓客戶端與羣集上的應用程序正確通信?

我知道,我必須:在設置XML

  • 配置Azure的負載平衡器
    • 配置TCP端點但我應該這樣一些事情?那麼在那種情況下怎麼樣?

      • 覆蓋CreateServiceListeners
      • 使用FabricClient客戶端
      • 使用ServicePartitionClient客戶端

      我的主要問題是如何創造ActorProxy和ServiceProxy

    回答

    0

    你不應該使用ActorProxy和ServiceProxy集羣外的類。而應使用面向公衆的服務,如使用https的Web Api,以充當服務的網關。然後在Azure負載均衡器上打開https端口。

    請仔細閱讀the docs因爲他們列出所有你需要採取的步驟。

    這是一個例子,它使用HTTPS的服務的(從文檔獲取):

    class HttpCommunicationListener : ICommunicationListener 
    { 
        ... 
    
        public Task<string> OpenAsync(CancellationToken cancellationToken) 
        { 
         EndpointResourceDescription endpoint = 
          serviceContext.CodePackageActivationContext.GetEndpoint("WebEndpoint"); 
    
         string uriPrefix = $"{endpoint.Protocol}://+:{endpoint.Port}/myapp/"; 
    
         this.httpListener = new HttpListener(); 
         this.httpListener.Prefixes.Add(uriPrefix); 
         this.httpListener.Start(); 
    
         string publishUri = uriPrefix.Replace("+", FabricRuntime.GetNodeContext().IPAddressOrFQDN); 
         return Task.FromResult(publishUri); 
        } 
    
        ... 
    } 
    
    class WebService : StatelessService 
    { 
        ... 
    
        protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() 
        { 
         return new[] { new ServiceInstanceListener(context => new HttpCommunicationListener(context))}; 
        } 
    
        ... 
    } 
    

    公共服務等的一個以上應該使用ActorProxy和ServiceProxy類工作委託給底層服務和演員。

    所以總結:

    但我應該這樣一些事情?那麼在那種情況下怎麼樣?

    • 覆蓋CreateServiceListeners

    • 使用FabricClient客戶端沒有

    • 使用ServicePartitionClient客戶端沒有

    我的主要職業blem是如何創造ActorProxy和ServiceProxy 這僅在集羣中的適用於通信服務之間

    +0

    那麼,你所談論的是使用此API作爲一個網關我每次使用通過服務遠程我必須調用方法現在通過Api調用它,對吧? 我現在有一些問題: 我的應用程序是一個在線遊戲,我的客戶端是一個控制檯應用程序。它使用遠程方法與無狀態服務(登錄服務)和演員服務(遊戲會話)進行交互。我的客戶現在將如何調用Api方法(作爲客戶端和服務方法之間的接口)並接收這些服務方法的返回值? 我的客戶使用了Actor Events。我的客戶現在如何接收它? – Shkire

    +0

    通過使用具有正確端口號的集羣FQDN,您的客戶端可以像調整任何其他服務一樣調用web/wcf api。揭露演員事件可能會更具挑戰性。也許SignalR或者讓服務可以調用的客戶端監聽器是一個選項 –

    相關問題