MVC中的服务总线+ webjob.发送字符串作为消息
本文关键字:字符串 消息 webjob 服务 总线 MVC | 更新日期: 2023-09-27 18:15:31
我正在尝试学习使用Webjob服务总线。我正在使用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向Reader发送消息?我使用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);
}