ai didi

具有动态 SQL 筛选器查询的 Azure 服务总线主题订阅

转载 作者:行者123 更新时间:2023-12-02 23:47:17 24 4
gpt4 key购买 nike

我正在尝试使用Azure服务总线在多个azure函数之间传递消息。我正在代码中创建主题和订阅。但不确定如何从代码添加过滤器查询。我想按 id 过滤消息。例如 SqlFilter($"'id' ='{id}'") 。由于此过滤器,我不想为每条消息创建一个订阅。

订阅是否可以有不同的过滤器?

可以通过为每个请求创建一个订阅并随后将其删除来解决此问题。但我不想创建这么多订阅。我的目标是在每次调用函数时更改过滤器。

示例代码:

var connectionString = ConfigurationManager.AppSettings["ServiceBus_CONNECTION_STRING"];
var namespaceManager =
NamespaceManager.CreateFromConnectionString(connectionString);
if (!await namespaceManager.TopicExistsAsync(topicName))
{
// Configure Topic Settings.
var topic = new TopicDescription(topicName)
{
MaxSizeInMegabytes = 1024,
DefaultMessageTimeToLive = TimeSpan.FromMinutes(5)
};

await namespaceManager.CreateTopicAsync(topic);
}

if (!await namespaceManager.SubscriptionExistsAsync(topicName, subscription))
{
await namespaceManager.CreateSubscriptionAsync(topicName, subscription);
}

var cts = new TaskCompletionSource<T>();
var subClient =
SubscriptionClient.CreateFromConnectionString(connectionString, topicName,
subscription);

var ruleDescription = new RuleDescription($"RequestIdRule{id}", new SqlFilter($"'id' ='{id}'"));

await subClient.AddRuleAsync(ruleDescription);
var options = new OnMessageOptions();

subClient.OnMessage(m =>
{
try
{

var body = m.GetBody<T>();
cts.SetResult(body);
}
catch (Exception ex)
{

m.Abandon();
}
},
options);

return await cts.Task;

}
catch (Exception ex)
{
throw;
}

最佳答案

Is it possible to have different filter for a subscription?

是的。一个主题及其所有订阅最多可以有 2,000 个 SQL 过滤器(相关过滤器为 100,000 个)。请参阅文档 here .

您无法更新过滤器。您需要删除旧规则并通过创建新规则来替换它。但如果您在运行时经常这样做,我会质疑这种方法的效率。

I am trying to use Azure service bus to pass messages between multiple azure functions.

或者,您可以让每个函数都有其输入队列,链接这些函数将向相应的 Azure 服务总线输入队列发送消息。

最后,

My aim is to just change the filter each time the function is called.

如果消息数量激增,您的功能将被扩展。这意味着,您可以对不同的消息执行相同的函数。每条消息都需要在同一订阅下创建不同的规则。这不仅让人感觉不舒服,而且会产生对订阅更新规则的争用,这将导致失败或不正确的行为。

关于具有动态 SQL 筛选器查询的 Azure 服务总线主题订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46534457/

24 4 0
文章推荐: azure - Microsoft Graph-API 和 Azure 移动应用
文章推荐: azure - 从 Azure EventHub 填充 Azure CosmosDb
文章推荐: azure - 用户如何在登录期间取消同意
文章推荐: azure - 设备如何接收 IoT 中心中的直接方法?
行者123
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com