c# sharp proejct .net 4.5 依赖项,应该与 azure 消息队列交互

c# sharp proejct .net 4.5 dependency, should interact with a azure message queue

我目前正在开发一个依赖 .net 4.5 的项目,这就是为什么我被迫使用 Microsoft.Servicebus - 因此消息工厂

创建消息工厂对象似乎没有问题,但创建消息发送者似乎是这里的问题。

我不确定我的 Azure 消息队列的实体路径是什么,也不知道我应该如何查找它?

我这样初始化了我的消息工厂;

public Microsoft.ServiceBus.Messaging.MessagingFactory client = Microsoft.ServiceBus.Messaging.MessagingFactory.CreateFromConnectionString(ServiceBusConnectString);

其中 servicebusconnectionstring 是从 azure 队列中提取的主要连接字符串,或者遵循本指南:https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues#1-create-a-namespace-using-the-azure-portal

消息发件人是这样创建的:

Microsoft.ServiceBus.Messaging.MessageSender sender = client.CreateMessageSender(destinationQueue,queueName);

再说一次destionationQueue和queueName是字符串,是从azure定义的?

要发送的消息是这样创建的:

Microsoft.ServiceBus.Messaging.BrokeredMessage message = new Microsoft.ServiceBus.Messaging.BrokeredMessage(e.ToXml());

e 只是一个对象,它具有可以将其转换为 xml 字符串的 public 函数。

这里是我发送消息的地方:

try
{
   IntegrationLogger.Write(LogLevel.Verbose, "Sending message to azure");
   sender.Send(message);
}
catch(System.Exception ex)
{
  if(ex is System.TimeoutException)
  {
    IntegrationLogger.Write(LogLevel.Error, "Timeout exeption");
  }

  if (ex is System.ArgumentException)
  {
    IntegrationLogger.Write(LogLevel.Error, "Message is empty");
  }

}

IntegrationLogger 是我使用的一个日志函数 - 最后一条被记录的消息是 "Sending message to azure",这意味着当我发送它时出现了错误。 连catch都没有捕捉到异常?..

这可能是什么问题?

我是否错误地使用了发件人?

I am not sure what the enity path for my azure message queue is, and don't know how i should look it up?

如果我们想创建队列MessageSender,我们可以使用下面的代码。

var sender = client.CreateMessageSender(queueName);

我们也可以使用 queueclient 来发送和接收代理消息。

var client = QueueClient.CreateFromConnectionString("servicebus connection string", queueName);

// how to send message
var sendMessage = new BrokeredMessage(data);
client.Send(sendMessage);

//how to receive message
client.OnMessage(message =>
{
     var dataInfo = message.GetBody<T>();
});

IntegrationLogger is a log function I use - and the last message being logged is "Sending message to azure", meaning somethng goes wrong when I send it. even catch does not catch the exepetion?..

对于你的情况,我建议你可以添加日志信息来检查发送消息时是否有任何异常。

 try
 {
   IntegrationLogger.Write(LogLevel.Verbose, "Sending message to azure");
   sender.Send(message);
   //add log
   IntegrationLogger.Write(LogLevel.Verbose, "Send message successfully"); 
 }