MVC中的服务总线+ webjob。将字符串作为消息发送

时间:2016-10-30 18:18:17

标签: c# asp.net-mvc azure azure-webjobs azureservicebus

我正在尝试使用带有Webjob的Service Bus学习。我正在使用3个项目,一个 Writer Webjob Reader 。我希望在传递时通过服务总线发送消息。我正在尝试从写入 - 项目发送消息,将其传递给 WebJob 并将文本转换为大写,然后再次通过队列将其传递给 Reader 。

我将所有这三个项目都放在同一个解决方案中(使用visual studio)。

这就是我的 WebJob function.cs的样子:

namespace WebJob {
    public class Functions {

        public static void ProcessQueueMessage([ServiceBusTrigger("test")] BrokeredMessage message, TextWriter log)
        {
            var text = message.GetBody<string>().ToUppder();

            Console.WriteLine(text);
            log.WriteLine(text);
        }
    }
}

Connectionstring和azure上的其他东西都已解决了。但我不知道如何将 Writer 项目中的WriterController文本发送到 WebJob (将邮件转换为大写)并将其传递给ReaderController并将其显示在 Reader 项目中。

我没有控制器的代码,因为我不知道如何发送它..

如何以这种方式从 Writer 读者发送消息?

1 个答案:

答案 0 :(得分:2)

  

我正在使用3个项目,一个Writer,Webjob和Reader。我希望在传递时通过服务总线发送消息。我正在尝试从Write-project发送消息,将其传递给WebJob并将文本转换为大写,然后再次通过队列将其传递给Reader。

您似乎想从“写入”项目创建Service Bus队列消息,然后可以由Service Bus触发的WebJob将消息内容转换为大写并将消息插入Azure存储队列,然后“读取”项目将显示Azure存储队列中的消息。如果是这种情况,您可以参考以下步骤和代码来设计您的项目。

WriterController 操作方法中,您可以创建Service Bus队列消息。

var connectionString = "yourconnectionstring";
var queueName = "yourqueuename";

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

string mes = "your queue message";
var message = new BrokeredMessage(mes);

client.Send(message);

//redirect to another page to display message
//Thread.Sleep(2000);

//return Redirect("http://xxxx/{YourReaderControllerName}/ReadMessage");

WebJob 功能中,您可以将Service Bus队列消息转换为大写,并在处理Service Bus队列消息时将其作为Azure存储队列消息插入。

public static void CreateQueueMessage([ServiceBusTrigger("servicebusqueuename")] string message, [Queue("azurestoragequeuename")] out string outputQueueMessage, TextWriter log)
{
    var text = message.ToUpper();

    outputQueueMessage = text;

    log.WriteLine(message);

}

ReaderController 操作方法中,您可以从Azure存储队列中获取消息。

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
                        CloudConfigurationManager.GetSetting("StorageConnectionString"));

CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
CloudQueue queue = queueClient.GetQueueReference("azurestoragequeuename ");
CloudQueueMessage retrievedMessage = queue.GetMessage();

string qmes = retrievedMessage.AsString;

//Process the message, and then delete the message
//queue.DeleteMessage(retrievedMessage);

编辑:

  

是否可以通过另一个Service Bus queue2从WebJob发送到WriterController?如果是这样,您是否介意将其从存储队列修改为服务总线队列?

当WebJob处理Service Bus队列消息时,您可以参考此代码段在名为“queue2”的另一个Service Bus队列中创建新消息。

public static void CreateQueueMessage([ServiceBusTrigger("myqueue")] string message, [ServiceBus("queue2")] out string outputQueueMessage)
{
    outputQueueMessage = message.ToUpper();

    //Console.WriteLine(message);
}