我需要一起处理同一组消息,为此,我尝试了 Azure 服务总线会话启用功能。为了测试这一点,我创建了一个非常简单的应用程序,在队列中成功提交了一条消息,但是,在“ReceiveSessionMessage”函数中尝试接收消息时,没有返回消息会话,程序在此行之后退出。>
我无法找出确切的根本原因,任何帮助将不胜感激。谢谢
<块引用>[var messageSession = 等待 sessionClient.AcceptMessageSessionAsync();]
计划
using Microsoft.Azure.ServiceBus;
using System;
using System.Text;
using System.Threading.Tasks;
namespace TestSendReceiveMessagesAzure
{
class Program
{
static string connectionString = "";
static string queueName = "demosessionqueue";
static void Main(string[] args)
{
Console.WriteLine("Test Service Bus Session! enable feature");
SendMessage();
Console.WriteLine("Message Pushed");
ReceiveSessionMessage();
}
private static void SendMessage()
{
QueueClient queueClilent = new QueueClient(connectionString, queueName, ReceiveMode.PeekLock);
string msgJson = "{PizzaType:Veggie,SessionID:SessionId0101}";
Message message = new Message(Encoding.UTF8.GetBytes(msgJson))
{
SessionId = "SessionId0101"
};
Console.WriteLine(msgJson);
queueClilent.SendAsync(message).Wait();
}
private static async Task ReceiveSessionMessage()
{
var sessionClient = new SessionClient(connectionString, queueName, ReceiveMode.PeekLock);
Console.WriteLine("Accepting a message session...");
try
{
var messageSession = await sessionClient.AcceptMessageSessionAsync();
Console.WriteLine($"Message.SessionID={messageSession.SessionId}");
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}
}
}
控制台输出
答案 0 :(得分:0)
问题在于
的声明 <块引用>static void Main(string[] args) ,以及其中的调用方法“ReceiveSessionMessage()”。从 Program.cs 调用这个函数的正确方法是
static async Task Main(string[] args)
{
Console.WriteLine("Message Session Handler..");
await MessageSessionReceiver();
}
"ReceiveSessionMessage" 函数是一个异步函数,调用函数没有提到 await 关键字,因为程序退出。更改语法以添加等待后,它起作用了。