C# 如何在web角色和辅助角色(而不是服务总线)之间发送消息?

C# 如何在web角色和辅助角色(而不是服务总线)之间发送消息?,c#,azure,azure-worker-roles,azureservicebus,azure-servicebus-queues,C#,Azure,Azure Worker Roles,Azureservicebus,Azure Servicebus Queues,我一直在使用azure service bus在web角色和worker角色之间来回发送消息,我真的认为这是一个非常好的解决方案,但最近我发现service bus非常不稳定,有时工作正常,有时消息会毫无理由地死信。我不知道这是否是我的代码中的一个问题,但在我看来,它只是不稳定,因为它有时工作,有时不工作。因此,我想知道是否有任何替代服务总线的解决方案,或者我很高兴知道我在服务总线实现中所犯的任何错误导致了我的上述问题。下面是我的代码 public override void Run() {

我一直在使用azure service bus在web角色和worker角色之间来回发送消息,我真的认为这是一个非常好的解决方案,但最近我发现service bus非常不稳定,有时工作正常,有时消息会毫无理由地死信。我不知道这是否是我的代码中的一个问题,但在我看来,它只是不稳定,因为它有时工作,有时不工作。因此,我想知道是否有任何替代服务总线的解决方案,或者我很高兴知道我在服务总线实现中所犯的任何错误导致了我的上述问题。下面是我的代码

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个服务总线客户端,即异步发送和接收来自不同队列的消息。它真的很奇怪,有些消息是如何工作的,有些没有任何原因就死信了,有时它是替代的,所以我想我的代码中一定有问题,但我找不到任何问题。如果有人不知道问题出在哪里,请告诉我你考虑过N服务总线吗?我不确定是否有很多关于集成Signal和NServiceBus的例子,但通过谷歌搜索应该可以让您开始


消息进入死信队列而不显式调用message.DeadLetter()有几个原因。检查以下各项: 1) 在队列和消息上,如果此时间过期,则消息将以死信形式显示,并且不会传递。默认情况下,这是无限的。
2) Delivery count确定在发送死信之前收到邮件的次数。上面我没有看到任何异常处理,所以如果您在消息处理过程中遇到错误,并且没有对消息调用complete,则传递计数将增加。在队列上,您可以设置消息在死信之前应传递多少次

但是对于azure存储队列,我必须反复轮询队列,以检查队列上是否有任何新消息!我不想这样做,因为这将大大增加我的成本……这就是为什么我最初更喜欢服务巴士,但不幸的是服务巴士似乎不够可靠!还有其他想法吗?谢谢,我来看看!另外,如果你不介意的话,你能看看我的服务总线代码,如果你发现任何可能导致问题的错误,请告诉我吗?MaxDeliveryCount默认设置为10,不幸的是,这不是原因。我觉得这与我如何同时异步处理3个服务总线客户机有关。有什么意见吗?