サービス バスを使用して Web ロールとワーカー ロールの間の通信を行っていますが、不安定な結果が得られます。クラウド プロジェクトを Azure にデプロイしました。驚くべきことに、デプロイされたプロジェクトだけを実行すると、サービス バスは正常に動作しますが、サービス バスも使用しているローカル エミュレーターで同じプロジェクトを実行すると、すべてのメッセージのようにサービス バスが故障し、デッド レターに移動します。または worker ロールによって受信されません。これはサービス バスの正常な動作ですか? そうでない場合、何が問題であり、どうすれば修正できますか?
ローカル エミュレーターでプロジェクトを実行すると、サービス バスが正常に動作しないため、これは私にとってイライラします。
これがメッセージの送受信方法ですが、サービスバスをデプロイされたプロジェクトだけで使用している場合は問題なく動作するため、問題はないのではないでしょうか。
労働者の役割:
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;
}
Web ロール:
var queueClient = CloudStorageHelper.GetServiceBusQueueClient(Queuenames.ApiToWorkerRole);
BrokeredMessage message = new BrokeredMessage(record);
queueClient.Send(message);
サービス バス キューの作成方法:
public static QueueClient GetServiceBusQueueClient(string queuename)
{
string connectionString = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString");
var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
if (!namespaceManager.QueueExists(queuename))
{
namespaceManager.CreateQueue(queuename);
}
QueueClient Client = QueueClient.CreateFromConnectionString(connectionString, queuename);
return Client;
}