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

在azure service bus主题中使用MASTRANSIT向特定用户组发送消息

曾典
2023-03-14

我是azure服务巴士和Masstransit的新手。我在寻找一个解决特定情况的方法。

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

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

共有1个答案

百里杰
2023-03-14

当使用Azure Service Bus和MassTransit时,您可以在常规endpoint之外添加订阅endpoint。配置订阅终结点时,应该能够将规则和/或筛选器指定为订阅的一部分。这正是你在上面所做的,所以这是可以处理的。

另一部分,向消息添加属性,可以通过向sendcontext添加文本头来完成。这些标头被复制到message Properties集合中,我相信该集合可用于使用“SQL”筛选器(在订阅endpoint上配置,或在接收endpoint上配置主题订阅)筛选消息。

 类似资料:
  • 我是新手。NET(C#)和WebSocket。。。我已经安装了VS2012和Windows Server 2012,并且已经启动并运行了WebSocket。我似乎无法从一个套接字接收消息并将其发送到另一个特定的套接字。唯一的选择似乎是向所有套接字广播消息。有没有一种方法可以将消息只发送给特定的用户?我希望聊天室主持人有机会拒绝不适当的帖子。

  • 我使用本教程中描述的spring设置了一个WebSocket:https://spring.io/guides/gs/messaging-stomp-websocket/。我需要的是我的服务器每5秒向特定用户发出一条消息。所以我首先做了这个: 而且起作用了。现在,为了只向特定用户发送消息,我更改了以下内容: 在WebSocketConfig.java中添加队列: 更改GreetingControl

  • 问题内容: 如何仅从服务器向特定用户发送websocket消息? 我的webapp具有spring安全设置,并使用websocket。我在尝试仅从服务器向特定用户发送消息时遇到棘手的问题。 通过阅读手册,我的理解是来自我们可以做的服务器 在客户端: 但是我永远无法调用订阅回调。我尝试了许多不同的方法,但是没有运气。 如果我将其发送到/ topic / reply,它可以工作,但所有其他已连接用户也

  • 如何仅将websocket消息从服务器发送给特定用户? 我的webapp具有Spring Security设置,并使用websocket。我在尝试只从服务器向特定用户发送消息时遇到了一个棘手的问题。 从阅读手册中我的理解是从服务器上我们可以做到的 在客户端: 但是我永远无法调用订阅回调。我尝试了许多不同的道路,但没有运气。 如果我将它发送到/topic/reply,它会工作,但所有其他连接的用户也

  • 假设我在MongoDB中有以下模式: 每个帖子必须有一个所有者,并且可能有许多贡献者(由所有者添加)。 当所有者或任何贡献者对post对象进行更改时,我需要将该更改实时通知给所有相关的用户(使用Socket。IO)。 但是我对如何做到这一点有一些疑问...我的意思是,我知道 Socket.IO 有一些方法可以向特定用户发出消息,但我们需要知道 SocketID。如何将用户 ID 与套接字 ID 相

  • 问题内容: 我编写了用于向 所有 用户广播消息的代码: 请注意: 我没有任何用户参考,只有一个连接。 所有用户连接均存储在中。 目标 :假设Node.js服务器希望将消息发送到特定客户端(约翰)。NodeJs服务器如何知道John拥有哪个连接?Node.js服务器甚至都不认识John。它所看到的只是连接。 因此,我相信现在,我不应该仅通过用户连接来存储用户,而是需要存储一个对象,其中将包含和对象。