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");
}
我目前正在开发一个依赖 .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");
}