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

本文关键字:字符串 消息 webjob 服务 总线 MVC | 更新日期: 2023-09-27 18:15:31

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

我得到了所有这三个项目在相同的解决方案(使用visual studio)。

这是我的WebJobfunction.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项目中。

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

如何以这种方式从WriterReader发送消息?

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

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

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

WriterController action方法中,可以创建服务总线队列消息。

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函数中,你可以将服务总线队列消息转换为大写,并在处理服务总线队列消息时将其作为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 action方法中,你可以从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);
编辑:

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

当WebJob处理服务总线队列消息时,您可以参考此代码片段在另一个名为"queue2"的服务总线队列中创建新消息。

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