2017-07-18 136 views
0

我已成功將羣集部署到天藍色,並且所有節點上都啓用了反向代理服務器,並且https工作。這是一個多租戶羣集,每個租戶都有自己的應用程序,一些有狀態的服務將能夠管理某些Web套接字。服務結構反向代理服務器有狀態服務端口設置

我設法得到一個在websockets本地工作的紅隼實例,但在Azure中我只得到404s。我認爲我的端口配置是錯誤的。我已經閱讀了所有的反向代理文檔,但仍然無法解決某些問題。

Q1是否有意接收來自反向代理的消息的有狀態服務的所有監聽器都必須在19081上進行監聽?我會這麼想,但documentation隨機放置一個不同的端口(10592?)和一個超長ID作爲某種標識符(我相信它是partitionId和replicaId的組合),沒有解釋它如何映射名稱到命名服務中的監聽端口。

舉個例子,讓我們的面料:該 打開一個HTTP偵聽以下網址/ MyApp的/爲MyService服務:

http://10.0.0.5:10592/3f0d39ad-924b-4233-b4a7-02617c6308a6-130834621071472715/

我是否意味着要使用這個超級長ID作爲收聽地址?我猜這意味着kestrel不在使用 - 因爲多個人可能會嘗試在同一個節點上偵聽,但我可以使用Web/Http偵聽器,以便共享端口。

Q2如果我希望服務僅偵聽反向代理,那麼是否有必要創建偵聽器? ListenerName似乎是URI格式化中用於尋址服務的必要參數。在這種情況下,是不是可以調用動態生成的主機? (如WCF服務主機)正在偵聽生成的路徑,即https://fabric:19081/MyApp/MySvc/SomeWcfPath1

快樂張貼(碎)的代碼,但我認爲這更多的是一種概念上的問題,一旦我理解的侷限性/基礎架構更好,我可以解決它自己

問候

回答

1

你看到的原因用於有狀態服務的超長URL是因爲在很多情況下,您將在同一節點上擁有多個分區和副本。默認實例/模板可能做的一個約定:

http://+:port/partition/replica/newGuid 

考慮以下情況:你有兩個有一個主副本和兩個輔助副本兩個分區有狀態服務。

Partition 1: 2446223d-5998-45f3-90fc-2d9705bedb1d 
Partition 2: 7af3a1f0-7845-4003-b192-6a8b64cc47fd 

您可以設置輔助副本來打開通信。如果你只使用分區ID作爲監聽地址,那麼你將有以下:

http://10.10.10.1:19081/2446223d-5998-45f3-90fc-2d9705bedb1d (Primary) 
http://10.10.10.1:19081/2446223d-5998-45f3-90fc-2d9705bedb1d (Secondary) 
http://10.10.10.1:19081/2446223d-5998-45f3-90fc-2d9705bedb1d (Secondary) 
http://10.10.10.1:19081/7af3a1f0-7845-4003-b192-6a8b64cc47fd (Primary) 
http://10.10.10.1:19081/7af3a1f0-7845-4003-b192-6a8b64cc47fd (Secondary) 
http://10.10.10.1:19081/7af3a1f0-7845-4003-b192-6a8b64cc47fd (Secondary) 

在五個節點集羣你將有一個單一的節點在同一偵聽器,這是一個矛盾。所以你需要通過添加別的東西來使它更獨特。無狀態web api模板中的默認OwinCommunicationListener實現將使用partitionId,replicaId和一個隨機guid。我不認爲分區+副本就足夠獨特,所以這就是爲什麼他們添加一個隨機guid的路徑。

+0

我認爲你是對的,我的服務都是SingletonPartitions - 所以我不必擔心衝突。我是否應該用長ID來監聽這個URL,而不是解析名稱? –

+0

你是什麼意思「而不是解決名稱?」 – Dismissile

+0

例如,客戶端會調用https:// mycluster:19081/MyApp// - >但在服務中,我應該聽取https:// :19081//MyEndpoint?因爲這就是代理翻譯它的目的?或者是完全錯誤的 –