2017-07-18 146 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?因为这就是代理翻译它的目的?或者是完全错误的 –