QueueClient.OnMessage将回调函数Action<BrokeredMessaged>
作为参数,由内部消息泵执行,该消息泵在消息可用时不断轮询队列(或订阅)。
我一直在查看Reflector中的BrokeredMessage类型但是找不到从BrokeredMessage对象获取消息来自的队列名称的方法(最后一部分是键)。如果可以的话,如何将其拉出来?
答案 0 :(得分:0)
最后找出了一个使用反射的解决方案:
public void OnMessageCallback(BrokeredMessage message) {
var context = message.GetType().GetProperty("ReceiveContext", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(message);
var receiver = (MessageReceiver)context.GetType().GetProperty("MessageReceiver", BindingFlags.Public | BindingFlags.Instance).GetValue(context);
var queueName = receiver.Path;
}
答案 1 :(得分:0)
如果您使用var newsListView: UIViewController!
newsListView = mainStoryboard.instantiateViewControllerWithIdentifier("NewsList")
sideMenuController()?.setContentViewController(newsListView)
,则可以执行以下操作:
QueueClient.OnMessage
如果您不想使用匿名函数,可以将queueName传递给将要处理消息的函数:
var client = QueueClient.CreateFromConnectionString("MyConnectionString");
client.OnMessage(message =>
{
// You always have access to the queue path
var queueName = client.Path;
});
并称呼你这样的功能:
public void ProcessMessage(BrokeredMessage message, string queueName)
{
}
编辑:使用MessageReceiver
Azure ServiceBus SDK提供了一个抽象来接收来自队列或订阅的消息:
var client = QueueClient.CreateFromConnectionString("MyConnectionString");
client.OnMessage(message =>
{
ProcessMessage(message , client.Path);
});