首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(Azure) BrokeredMessage.GetBody<xxx>

(Azure) BrokeredMessage.GetBody<xxx>
EN

Stack Overflow用户
提问于 2016-03-03 22:02:47
回答 1查看 526关注 0票数 0

我正在尝试建立一个‘通用’的订阅者,我可以(再)在Azure ServiceBus上使用。

但是我被困在了下面;我的代码一旦去掉了不必要的部分,看起来就像这样。

代码语言:javascript
复制
Subscribing.Client.OnMessage((recdMessage =>
{
    var msgBody = recdMessage.GetBody<myClass>();
}, options);

我希望我的msgBody是已经序列化到消息体中的类型。实际上,如果myClass类似于TelephonyEventMessage,并且接收到的消息属于该类型,那么我的msgBody将是该类型的正确实例化/恢复消重的对象。但是尽管我可以使用recdMessage。ContentType以获取该消息中类的字符串名...我只是想不出我需要在上面的myClass中放什么。我现在已经到了知识的尽头,再多的搜索看起来都不像是我的答案。我是否需要为我的消息中可能存在的每种类型添加特定版本?

EN

回答 1

Stack Overflow用户

发布于 2016-03-03 22:09:46

如果您希望使用多种不同的对象类型,则可以使用此选项从订阅接收消息:

代码语言:javascript
复制
public void ReceiveMessageFromSubscription<T>(string topicPath, string subscriptionName, Action<T> action)
{
    var client = SubscriptionClient.CreateFromConnectionString(ConnectionString, topicPath, subscriptionName);

    client.OnMessage((message) =>
    {
        try
        {
            _logger.Information("Processing message");
            action(message.GetBody<T>());
            message.Complete();
        }
        catch(Exception ex)
        {
            _logger.Error(ex, "Error processing message");
            message.Abandon();
        }
    } );
}

然后传入一个知道如何处理对象的方法,如下所示。您可能有许多这样的方法,它们都调用ReceiveMessageFromSubscription。

代码语言:javascript
复制
public void ProcessObject()
{
    _serviceBusService.ReceiveMessageFromSubscription<MyObject>(mytopic, mysubscription, _myobjectService.ProcessObject);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35774295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档