我在擺弄azure提供的選項以平衡多個卷軸之間的負載。爲什麼我應該使用LoadBalancerProbe而不是訂閱RoleEnvironment.StatusCheck事件?
我發現了三種可能的方式來做到這一點。
第一個應該是什麼也不做,讓默認(循環)實現來完成這個工作。
第二種可能性是在ServiceDefinitionFile中定義一個自定義的LoadBalancerProbe,我試過並且沒有工作:根據我的理解,每次在角色上執行狀態檢查時都會調用自定義aspx頁面。根據http響應代碼,角色將其狀態更改爲繁忙狀態。 - 但這從來沒有發生過。 此外,我真的找不到任何定義自定義LoadBalancingProbe的示例。
因此,我尋找一種替代方法來做到這一點。
現在我訂閱RoleEnvironment.StatusCheck事件,它允許我實現一些邏輯,並根據結果將角色狀態設置爲繁忙和可用。
我的問題: 1)假設自定義LoadBalancerProbe的工作方式與MSDN中描述的一樣,訂閱StatusCheckEvent和使用自定義探針有什麼區別?
2)爲什麼我的自定義負載平衡器探針不起作用? - iam現在只需使用azure模擬器進行測試,並且iam知道流量仍然會被路由到webrole實例,儘管它們在模擬器中設置爲繁忙。 但我的自定義探針根本不會改變webroleinstances的狀態。
這是非常基本的代碼,應該 - 據我所知,將webrole instance_n_0的狀態設置爲繁忙狀態。
public class LoadBalanceController : Controller
{
public ActionResult Index()
{
WebOperationContext woc = WebOperationContext.Current;
if(RoleEnvironment.CurrentRoleInstance.Id.ToLower().Contains("_0"))
{
woc.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.ServiceUnavailable;
}else
{
woc.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
}
return View(); //not relevant
}
香港專業教育學院也configered我servicedefinitionfile和設定的路線來調用自定義探頭定義的healthcheck.aspx時重定向到該控制器/動作。
<LoadBalancerProbes>
<LoadBalancerProbe name="WebRoleBalancerProbeHttp" protocol="http" path="healthcheck.aspx" intervalInSeconds="5" timeoutInSeconds="100"/>
</LoadBalancerProbes>
...
<InputEndpoint name="EndpointWeb" protocol="http" port="80" loadBalancerProbe="WebRoleBalancerProbeHttp"/>
的路線:
routes.MapRoute(
name: "HealhCheck",
url: "healthcheck.aspx",
defaults: new { controller = "LoadBalance", action = "Index", id = UrlParameter.Optional }
);