我的集群中有两个应用程序(例如app1和app2)。这两个应用程序都将无状态服务作为连接到内部有状态服务的网关。我正在尝试在这两个应用程序之间进行调用。我已经完成了从app1到app2的反向代理服务通信。
从app1到app2的网址:http://localhost:19081/app2/stateless_app2_service/api/values
以上方案在本地群集中运行良好。但是,当部署到Azure群集上时,需要2分钟才能到达app2。
有人可以帮助我指出导致此延迟的我在做错什么吗?这与任何群集配置有关吗?创建群集时,我已经在ARM中为反向代理启用了端口19081。
下面是我的事件记录器,用于通过Azure群集上的服务进行的呼叫。 2分钟后接听电话。在涉及Azure群集中的应用程序间通信的每个调用中都会发生这种情况。
代码:
Stateless_app1_service
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new ServiceInstanceListener[]
{
new ServiceInstanceListener(serviceContext =>
new KestrelCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) =>
{
ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting Kestrel on {url}");
return new WebHostBuilder()
.UseKestrel()
.ConfigureAppConfiguration((builderContext, config) =>
{
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
})
.ConfigureServices(
services => services
.AddSingleton<HttpClient>(new HttpClient())
.AddSingleton<StatelessServiceContext>(serviceContext)
.AddSingleton<ILogger>(GenerateLogger()))
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
.UseUrls(url)
.Build();
}))
};
}
拨打电话:
_logger.TrackEvent("SF - Call made to other application");
var response2 = await _httpClient.GetAsync($"{_reverseProxy}/{_appNameConnectors}/{_apiNameConnectors}/api/Values");
_logger.TrackEvent("SF- RPC - Call successfully finished!");
答案 0 :(得分:0)
如果没有在网络级别上进行跟踪,将很难猜出该问题。
我建议您使用http://service1.application1
的服务dns名称(如果启用)来测试与服务的直接连接
即:
Uri uri = new Uri("http://service1.application1:8080/api/values");
HttpClient client = new HttpClient();
var response = await client.GetAsync(uri);
如果这可以解决问题,我们可以确定与代理相关的问题,如果不能解决,则需要调查网络通信,或者: