【问题标题】:How can I use SignalR as Azure Service Bus transport?如何将 SignalR 用作 Azure 服务总线传输?
【发布时间】:2014-06-07 12:06:13
【问题描述】:

我正在尝试寻找一种替代方法来使用 REST 从浏览器中读取 Azure 服务总线主题订阅。似乎 SignalR 对此很自然,但我似乎找不到任何做过它的人。我不是在谈论横向扩展,只是一个 SignalR 集线器,它将一组服务总线功能来回中继到浏览器。我正在考虑以下功能,

addReceiver(string topic, string subscriptionID);
defineSubscription(string name, string subscriptionRule);
deleteSubscription(string name);
postMessageToTopic(string topic, string message);

addReceiver 将在订阅上启动异步接收.每次从服务总线获得消息时,都会在 JS 客户端上调用一个函数。

【问题讨论】:

    标签: signalr servicebus azureservicebus


    【解决方案1】:

    这里有一些代码可以为人们指明正确的方向。

    namespace SBTester
    {
        public class SBHub : Hub
        {
            public void AddReceiver(string topic, string subscriptionName, string subscriptionFilter)
            {
                string messageData;
    
                TopicConnector.Initialize(  topic,
                                            Context.ConnectionId + "." + subscriptionName,
                                            subscriptionFilter);
    
                // Initiate receive loop on Service Bus
                TopicConnector.SBClient.OnMessage((receivedMessage) =>
                {
                    try
                    {
                        // Process the message
                        messageData = receivedMessage.GetBody<string>();
                        Clients.Caller.onMessage(topic, messageData);
                    }
                    catch
                    {
                        // Handle any message processing specific exceptions here
                    }
                });
            }
            public void DefineSubscription(string topic, string subscriptionRule)
            {
                // Call Service Bus to create Subscription on the Specified topic
            }
            public void PostMessageToTopic(string topic, string message)
            {
                // Call Service Bus to send a message
                Clients.All.addNewMessageToPage(topic, message);
            }
    
        }
    }
    

    【讨论】:

    • 现在评论可能有点老了。如果消息从后端服务发送到 ServiceBus,并且您想将其转发到特定客户端(Web 浏览器),我认为调用 Clients.Caller.. 不满足要求。当从服务总线(可能来自任何服务)收到消息时,如何选择客户端?你可能需要一个映射来做这样的事情:Clients.Client(Context.ConnectionId)...?
    【解决方案2】:

    从您的 Hub 代码中,您可以直接调用服务总线 API 来发送消息或直接使用来自 JavaScript/浏览器的服务总线 API:http://developers.de/blogs/damir_dobric/archive/2014/03/27/microsoft-azure-service-bus-receiving-of-messages-from-queue-and-topic-with-javascript.aspx

    【讨论】:

    • 谢谢阿布舍克。我希望有人已经实现了集线器代码来调用服务总线。 (微软应该考虑这样做!)来自 Damir Dobric 的东西很好,但它使用 REST API 与 ServiceBus 通信,这是我试图摆脱的。
    猜你喜欢
    • 2017-01-13
    • 2017-10-07
    • 2012-07-26
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多