.Net Core SignalR Проблема с соединением между службамиC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 .Net Core SignalR Проблема с соединением между службами

Сообщение Anonymous »

У меня есть несколько служб, взаимодействующих друг с другом через соединение SignalR. Обе они являются стандартными базовыми службами веб-API .net, скажем, у меня есть служба A и служба B.
Service У A настроен концентратор SignalR и принимает соединения, Сервис B подключен к нему с помощью класса HubConnection из пакета Microsoft.AspNetCore.SignalR.Client. И прослушивает некоторые сообщения от службы A с помощью:hubConnection.On('...')
Служба B также имеет концентратор signalR и принимает соединения от клиентов веб-сайта.
Служба A отправляет около 2000 сообщений в минуту в службу B, а >служба B также передает эти сообщения всем подключенным клиентам. к сервису B одновременно имеется около 80 клиентских подключений.
Проблема в том, что сообщения от сервиса A приходят очень поздно, их около 2 минут поздно. Я регистрирую строку, когда сообщение отправляется из службы A и получено в службе B, и разница составляет около 2 минут. У меня нет никаких идей, почему это происходит, 2 тысячи сообщений в минуту - это не так уж и много, как я считаю.
вот диаграмма:
Изображение

Служба B выполняет следующую логику для каждого полученного сообщения:

Код: Выделить всё

hubConnection.On(method.Name, parameterTypes, @params =>
{
return Task.Run(() =>
{
var activity = new Activity("HubListener");
try
{
activity.Start();
activity.AddTag("TraceId", Guid.NewGuid().ToString());
activity.AddTag("ArrivalTime", DateTime.UtcNow);

var obj = _serviceProvider.GetRequiredService(method.DeclaringType)
method.Invoke(obj, @params);
}
catch (Exception e)
{
Log.Error(e, "Error In Hub Listener");

}
finally
{
activity.Stop();
}
});
});
метод берется через отражение из моего класса BroadcastService (есть и другие методы, поэтому используйте отражение для динамической подписки):

Код: Выделить всё

public class BroadcastService {
private readonly IHubContext _baseHubContext;

public BroadcastService(IHubContext baseHubContext)
{
_baseHubContext = baseHubContext ?? BaseHub.CurrentContext;
}

public void BroadcastToClients(Message messageFromServiceA)
{
// it takes about 2 minutes for message to arrive at this place after it is sent from Service A.
// clients are separated in groups
foreach(var group in clientGroups){
_baseHubContext
.Clients
.Group(group.Name)
.SendAsync("onMessage",messageFromServiceA)
}
}
}
Если я запускаю службу B на локальном компьютере и нет подключений от клиентов, сообщения не задерживаются, это как-то связано с количеством клиентских подключений, но 80 это не так уж и много. Я не знаю, выполняются ли сообщения в HubConnection последовательно, но это не должно быть проблемой, поскольку я использую Task.Run, и обработчик должен запускаться асинхронно.
Буду признателен за любую помощь. Если потребуется дополнительная информация, я отредактирую вопрос.

Подробнее здесь: https://stackoverflow.com/questions/789 ... s-an-issue
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как заставить клиент .Net Framework SignalR подключаться к серверу .Net Core SignalR?
    Anonymous » » в форуме C#
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Как заставить клиент .Net Framework SignalR подключаться к серверу .Net Core SignalR?
    Anonymous » » в форуме C#
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Как заставить клиент .Net Framework SignalR подключаться к серверу .Net Core SignalR?
    Anonymous » » в форуме C#
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Правильное управление транзакциями базы данных между службами - ASP.NET Core, EF Core
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Правильное управление транзакциями базы данных между службами - ASP.NET Core, EF Core
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»