我正在尝试使用带有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 向读者发送消息?
答案 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);
}