当前位置: 首页 > 知识库问答 >
问题:

带有动态sql筛选查询的Azure Service Bus主题订阅

庄康胜
2023-03-14

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

示例代码:

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;
            }

共有1个答案

和选
2023-03-14

是否可以为订阅使用不同筛选器?

是的。单个主题及其所有订阅最多可以有2,000个SQL筛选器(100,000个用于相关筛选器)。请参阅此处的文档。

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

或者,您可以让每个函数都有它的输入队列,链接这些函数就是向适当的Azure服务总线输入队列发送一条消息。

最后,

我的目标是每次调用函数时只更改过滤器

 类似资料:
  • https://github.com/azure/azure-service-bus/tree/master/samples/dotnet/gettingstart/microsoft.azure.servicebus/topicsubscriptionwithruleoperationssample 现在我想添加一个筛选器/规则,这样只有通过筛选器中定义的特定条件的消息才应该给订阅。 例如,下面

  • 我已经能够弄清楚如何设置Azure ARM模板,该模板创建/管理Azure服务总线名称空间、主题和订阅,以接收所有消息。但是,ARM Tempates上的Microsoft文档仍然非常缺乏,我无法弄清楚如何在模板中为订阅定义一个SqlFilter,您可以使用.NET SDK管理该模板。 有人知道如何在ARM模板中向服务总线主题订阅添加Sql筛选器吗? 这里有一个ARM模板的链接,用于创建服务总线主

  • 在下面的代码中,我有时会将设置为null。此时,它抛出错误为“could not extract resultset;SQL[n/a];嵌套异常为org.hibernate.exception.sqlgrammarexception:could not extract resultset” 即使为空,我如何获取数据。总有一天约会就要来了。这是怎么做的? null

  • 问题内容: 我有一个数据库字段名称调用,我正在尝试使用如下所示的变量名称来选择它: 显然,SQL将解释为字符串,而不是数据库的字段,我如何以这种方式将其识别为字段名而不是字符串,可能没有任何select或if语句。 问题答案: 试试这个: 您必须组成一个动态查询,并使用 要在事物的“动态”方面添加更多内容,请使用存储过程。请参见此处的示例: http://www.marten-online.com

  • 好吧,这一个对你们中的一个超级棒的弹性搜索专家来说可能不会太难。我得到了这个嵌套查询,我希望嵌套查询在一个非嵌套字段(状态)上进行过滤。我不知道把过滤器放在哪里。我试着把它放在一个查询中(如下),但没有给出正确的结果。你能帮我吗?

  • 使用Python和psycopg2,我试图构建一个动态SQL查询来将行插入到表中。 变量有:1。表名2。列名的变量列表3。可变值列表,理想情况下在一条语句中输入多行 我遇到的问题是如何处理从Python到SQL的字符串文字,以及psycopg2如何避免代码受到SQL注入攻击。 使用SQL模块,我已经解决了动态添加表名和列列表的问题。然而,我真的很难添加VALUES。首先,值以%(val)s的形式放