0

因此,我目前正在尝试让Azure总线服务工作,在其中创建队列,然后将消息放入队列中,然后再接收到其他位置,并且使用消息传递的数据运行某些代码。我已经完成了一切设置和工作,正如我可以发送消息并收到它,但有一些问题。 虽然研究我发现似乎是两种不同的方法来完成相同的任务。使用Azure Bus Service时,ServiceBus/ServiceBusTrigger方法与使用QueueClient方法的区别是什么?

首先:

创建一个消息:

 public static void CreateMessage(string data, [ServiceBus("QueueName")] out string output) 
    { 
     output = data; 
    } 

收到一条消息:

public static void ProcessMessage([ServiceBusTrigger("QueueName")] string data) 
    { 
     //Do something with data 

    } 

注:我想用这个方法,并同时将邮件接收,收到数据时为空。任何帮助,将不胜感激。

其次:

创建一个消息:

var client = QueueClient.CreateFromConnectionString(connectionString, queueName); 
     var message = new BrokeredMessage("This is a test message!"); 

     client.Send(message); 

收到以下消息:

 var queueName = "QueueName"; 

    var client = QueueClient.CreateFromConnectionString(connectionString, queueName); 

    client.OnMessage(message => 
    { 
    //do something with data 
    }); 

所以几个问题。

1.这两种方法有什么不同,哪一种应该在哪里应用?

2.虽然我使用第一种方法来尝试并简单地发送一个字符串,但是谁能告诉我为什么'数据'通过为空,即使收到了该消息。

+0

当从服务总线(并发送)接收到一条消息时,是否有一个原因是您没有使用BrokeredMessage类? –

回答

3

1.这两种方法有什么不同,哪一种应该在哪里应用?

第一种方法使用Azure Webjob SDK创建消息并接收消息。第二种方法使用Azure .Net库。我们可以使用webjob轻松创建调度程序后台任务。 WebJobs SDK具有绑定和触发器系统,可与Microsoft Azure存储Blob,队列和表以及服务总线队列配合使用。如果你选择.Net库,并且想用它来做一些触发工作,我们需要编写我们的逻辑代码。当收到

你的意思是,该方法的ProcessMessage被触发,但是数据的值是空

数据为空?从我的测试中,它显示正确的值。我使用QueueTrigger将消息发送到服务总线,然后在ServiceBusTrigger中接收此消息。以下是我的测试代码。

enter image description here

请仔细检查你的代码。如果可能,请删除您的敏感连接字符串,上传到onedrive,然后在此共享链接。我们会更好地重现您的问题。

+0

第一个解释非常感谢。对于第二点我的意思。该方法肯定被触发(所以它正在拾取消息),但是在我的情况下,我的数据里面的数据是空字符串。即使当我发送消息时,字符串输出是“测试”。 因此,为了保持相似性,您需要更改ProcessQueueMessage函数,以便它不处理另一条消息,但只需一个字符串并将其放在服务总线上。 – gn12345

+0

@ gn12345您在问题中使用了哪些实现? 1或2?此外,您是否试图通过这种方式获取消息的值:'String.Format(“Message body:{0}”,message.GetBody ())'(例如[Getting Started] ://azure.microsoft.com/en-us/documentation/articles/service-bus-dotnet-get-started-with-queues/)页面? –

+0

@MarkC。我正在尝试使用第一种方法,还有我没有经过BrokeredMessage,只是一个字符串。 – gn12345

相关问题