使用 masstransit 向 azure 服务总线主题中的特定订阅者组发送消息

Sending message to a specific group of subscriber in azure service bus topic with masstransit

我是 azure 服务巴士和公共交通的新手。我正在寻找针对特定情况的解决方案。

我有一个具有多个订阅者的 azure 服务总线主题。订阅者将收到基于过滤器的消息。我用下面的代码创建了主题和订阅者

    class Program
        {
            static void Main(string[] args)
            {
    
                string connectionString = "Endpoint connection string";
    
                // the names of topics and subscriptions we'll be working with
                const string topicName = "MyTestTopic";
                const string allMessagesSubName = "AllMessages";
                const string filteredSubName1 = "Filtered1";
                const string filteredSubName2 = "Filtered2";
    
                // let's create the topic if it doesn't already exist...
                var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
                if (!namespaceManager.TopicExists(topicName))
                {
                    var td = new TopicDescription(topicName);
                    namespaceManager.CreateTopic(td.Path);
                }
                if (!namespaceManager.SubscriptionExists(topicName, allMessagesSubName))
                {
                    namespaceManager.CreateSubscription(topicName, allMessagesSubName);
                }
    
                if (!namespaceManager.SubscriptionExists(topicName, filteredSubName1))
                {
                    namespaceManager.CreateSubscription(
                        new SubscriptionDescription(topicName, filteredSubName1),
                        new Microsoft.ServiceBus.Messaging.SqlFilter("From LIKE '%Smith'"));
                }
    
                if (!namespaceManager.SubscriptionExists(topicName, filteredSubName2))
                {
                    namespaceManager.CreateSubscription(
                        new SubscriptionDescription(topicName, filteredSubName2),
                        new Microsoft.ServiceBus.Messaging.SqlFilter("sys.Label='important'"));
                }
    
                var message1 = new BrokeredMessage("Hello World");
    
                var message2 = new BrokeredMessage("Second message");
                message2.Label = "important";
    
                var message3 = new BrokeredMessage("Third message");
                message3.Properties["From"] = "Kelly Smith";
                message3.Label = "information";
    
                var client = TopicClient.CreateFromConnectionString(connectionString, topicName);
                client.Send(message1);
                client.Send(message2);
                client.Send(message3);
                client.Close();
            }
        }

我们在代码中添加 消息自定义属性,例如 From.

现在我想使用 masstransit 发送这样的消息。在公共交通中,我找不到使用 Publish() 方法添加 Message 自定义属性 的任何选项。有什么方法可以使用可以使用这些过滤器的公共交通工具发送这些消息吗?

注意:我已经阅读了这个 的答案,但是这里的答案告诉我们要在订阅者端过滤消息。我想要的是这种过滤将在到达订阅者之前发生。

将 Azure 服务总线与 MassTransit 结合使用时,您可以添加 订阅端点 除了常规端点之外。配置订阅端点时,您应该能够将规则 and/or 过滤器指定为订阅的一部分。这正是您在上面所做的,因此已处理。

另一部分,向消息添加属性,可以通过向 SendContext 添加文本 headers 来完成。那些 headers 被复制到消息属性 collection,我相信它可以用于使用 "SQL" 过滤器(在订阅端点上配置,或者主题订阅在接收端点)。