0

我一直在使用 azure 服务总线在 web 角色和工作角色之间来回发送消息,我真的认为这是一个非常好的解决方案,但最近我发现服务总线非常不稳定,有时它可以工作,有时消息会消失无缘无故变成一纸空文。我不知道它是否在我的代码中存在问题,但在我看来它只是不稳定的,因为有时它有效,有时它不起作用。所以我想知道是否有任何替代服务总线的解决方案,或者我很高兴知道在服务总线实现中出现的任何错误导致我的上述问题。下面是我的代码

public override void Run()
{
    while (!IsStopped)
    {
        try
        {
            if (BroadcastReceived)
                {
                    BroadcastReceived = false;
                    // Receive the message from Web Role to upload the broadcast to queue
                    BroadcastClient.BeginReceive(OnWebRoleMessageReceived, null);
                }

                if (SignalRMessageReceived)
                {
                    SignalRMessageReceived = false;
                    // Receive the message from SignalR BroadcastHub
                    SignalRClient.BeginReceive(OnSignalRMessageReceived, null);
                }

                if (SignalRFirstTimeMessageReceived)
                {
                    SignalRFirstTimeMessageReceived = false;
                    // Receive the message from SignalR BroadcastHub
                    SignalRFirstTimeClient.BeginReceive(OnSignalRFirstTimeMessageReceived, null);
                } 
     }
 }
public void OnWebRoleMessageReceived(IAsyncResult iar)
{
    BrokeredMessage receivedBroadcastMessage = null;
    receivedBroadcastMessage = BroadcastClient.EndReceive(iar);

    if (receivedBroadcastMessage != null)
    {
        // Process the message
       receivedBroadcastMessage.Complete();
    }
BroadcastReceived = true;
 }

在上面的代码中,我只展示了一个服务总线客户端的方法。在我的工作角色中,使用了 3 个服务总线客户端,即异步发送和接收来自不同队列的消息。它真的很奇怪,有些消息是如何工作的,有些消息是无缘无故地死信的,有时它是替代的,所以我认为我的代码中一定有问题,但我找不到任何问题。如果有人不知道问题是什么,请告诉我

4

2 回答 2

0

你考虑过 NServiceBus 吗?我不确定是否有很多关于集成 SignalR 和 NServiceBus 的示例,但谷歌搜索应该能让你开始

http://ben.onfabrik.com/posts/push-notifications-with-nservicebus-and-signalr

于 2013-03-04T14:38:42.567 回答
0

没有显式调用 message.DeadLetter() 的消息进入死信队列有几个原因。检查以下内容: 1)队列和消息上的TimeToLive,如果此时间到期,则消息将被死信且未传递。默认情况下这是无限的。2) 传递计数决定了消息在被死信之前被接收的次数。上面我没有看到任何异常处理,所以说您在消息处理过程中遇到错误并且没有在消息上调用完成,传递计数会增加。在队列上,您可以选择设置在死信之前应该传递多少次消息。

于 2013-03-05T14:41:39.753 回答