концентратор-концентратор утилизируют при поступлении сообщения о шине - PullRequest
0 голосов
/ 15 мая 2019

У меня есть приложение в сетевом ядре, которое реализует signalR, это приложение подключено к шине обмена сообщениями, которая реализует Masstrasit Rabbit MQ, приложение собирает сообщения, которые достигают очереди подключенной шины, но необходимо, чтобы эти сообщенияотображаются в клиенте javascript.

Когда сообщения доходят до подписчика очереди, я вызываю метод-концентратор, который отображает сообщения, но этот объект (концентратор) удаляется, что означает, что информация обо всехклиенты, подключенные к концентратору (signalR), потеряны, и нет клиента, которому можно было бы отображать сообщения.

Class Hub SignalR

 public class ChatHub : Hub
{

  public override async Task OnConnectedAsync(){

   String user = Context.GetHttpContext().Request.QueryString.Value.Split("=")[1].Split("&")[0];

   string appBus = Context.GetHttpContext().Request.QueryString.Value.Split("=")[2].Split("&")[0];

   await Groups.AddToGroupAsync(user, "SignalR Users");


   await base.OnConnectedAsync();


   ClientesModel client = new ClientModel() {
     Username = user,
     ID = Context.ConnectionId
   };
   MessageBusConfig.Configure(appBus, this);
 }

  public void SendAsync(string user, string message) {

    Task.Run(async () =>{

       await Clients.All.SendAsync("enviamensaje", user, message);

    });

  }

}

Class Config Buss

    public class MessageBusConfig
    {
        public static IBusControl BusControl { get; set; }

        public static void Configure(String nameQueue, ChatHub hub)
        {
            BusControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                cfg.AutoDelete = true;
                var host = cfg.Host(new Uri("rabbitmq://localhost/"), h =>
                {
                    h.Username("guest");
                    h.Password("guest");
                });

                cfg.ReceiveEndpoint(host, nameQueue, e => {
                    e.Consumer(() => new CheckinCommandProviders(hub));

                    //e.AutoDelete = true;
                });
            });

            BusControl.Start();
        }
    }

Класс Consumer mesage buss RabbitMQ с Masstrasit

public class CheckinCommandProviders: IConsumer<ContractSuscriber>{

  private ChatHub _hub;

  public CheckinCommandProveedores(ChatHub hub){
    _hub = hub;
  }

  public  Task Consume(ConsumeContext<ContratoSuscriptor> context){

      _hub.SenndAsync(context.Message.Usuario, context.Message.Mensaje);

       return Task.FromResult<int>(0);
   }
}

Интерфейс Контракт поставщика с подписчиком

Через этот интерфейс потребитель взаимодействует с очередью сообщений

    public interface ContratoSuscriptor
    {
        string Mensaje { get; set; }
        string Usuario { get; set; }
        bool IsOk { get; set; }
        string filtro { get; set; }
    }

Главным образом, когда он прибываетКонцентратор объекта был удален, и сообщение не может быть отображено

...