使用带有RabbitMQ和SignalR的Asp.net MVC 5

时间:2018-04-17 08:15:03

标签: asp.net-mvc-5 rabbitmq signalr

我有一个asp.net MVC 5应用程序。现在我希望有一个新功能允许我从设备接收GPS信号并在Web客户端实时更新设备。 我的计划是使用RabbitMQ处理消息队列,并使用SignalR通知客户端位置更新 像我这样的Rabbit消费者控制台应用程序中的代码

var client = GlobalHost.ConnectionManager.GetHubContext<MyHub>().Clients;
using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    var queueName = channel.QueueDeclare().QueueName;
                    channel.ExchangeDeclare("mychannel", "fanout");
                    channel.QueueBind(queueName, "mychannel", "");
                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        var body = ea.Body;
                        var message = Encoding.UTF8.GetString(body);
                        Console.WriteLine("[x] Receive {0}", message);
                        client.All.hello(message);

                    };

                    channel.BasicConsume(queue: queueName,
                        autoAck: true,
                        consumer: consumer);
                    Console.WriteLine("Press Enter to quit");
                    Console.ReadLine();
                }
            }

但是当我向RabbitMQ发送消息时,代码不会被触发。如果我删除signalR客户端的代码:

var client = GlobalHost.ConnectionManager.GetHubContext<MyHub>().Clients;
事情按预期工作,我可以像往常一样收到消息

我的问题是:

  1. 我的方法是否正确

  2. 如果方法正确,那么如何使其有效?

  3. 非常感谢

0 个答案:

没有答案