age*_*ris 2 esb nservicebus servicebus azure
我刚刚开始阅读很多关于服务总线架构的内容,并且更密切地关注NServiceBus框架.我并没有真正了解如何设计多个私有上下文,其中一组客户端对同一消息的副本感兴趣(例如聊天室应用程序).
服务总线应该只存在一次,还是我会为每个虚拟聊天室创建多个服务总线实例,并为每个感兴趣的客户端订阅消息处理程序实例?
它是否与我在Azure上下文中已经阅读过的主题和订阅概念有关?
服务总线应该只存在一次,还是我会为每个虚拟聊天室创建多个服务总线实例,并为每个感兴趣的客户端订阅消息处理程序实例?
使用NServiceBus时,您将为您创建的每个端点配置总线.您可以将端点视为处理某些消息的服务.端点不是动态的,它们需要指定名称,以便可以将其他端点配置为向其发送消息或从中接收消息.
这取决于你的系统的要求是什么,但我假设虚拟聊天室是你可以动态生成和/或当它不再使用时删除的东西.
它是否与我在Azure上下文中已经阅读过的主题和订阅概念有关?
NServiceBus和Azure Service Bus都提供了执行pub/sub的基础结构.
我真的不知道如何设计多个私有上下文,其中一组客户端对同一消息的副本感兴趣
多个私人环境究竟是什么意思?我理解你的问题是如何在客户和聊天室之间建立关系.描述中缺少的部分是持久性,即存储客户端和聊天室之间的关系.
使用NServiceBus作为示例,您可以使用ClientService来处理有关客户端执行的任何操作的消息,以及处理有关Chatroom中发生的操作的消息的ChatroomService.然后工作流程可以:
Post在聊天室中创建了一个.(客户端向ClientService发送命令)Post创建它的客户端的新ID和ID,以及发送给它的聊天室的ID(命令)Post到Posts相应聊天室中的列表(持久性)Post发给其他订阅的客户端.(订阅)我实际上并没有创建一个聊天室应用程序,因此这可能不是您想法的最佳设计,但它提供了一种描述如何使用NServiceBus创建应用程序的方法.您可以使用端点设置服务,以处理与系统中的对象相对应的消息.使用此设计或类似设计,您可以分离关注点,并根据每个对象类型必须处理的流量,根据需要扩展服务.
编辑以根据评论中的问题添加更具体的示例
注:改变所有引用text message,以Post使那里有间没有歧义chat message,并IMessage在NServiceBus.我一直在使用条款command和event故意.在NServiceBus中,ICommand是一种只能发送到1个端点IEvent的消息,而是一种可以由许多端点发布和订阅的消息.
如果示例不清楚,请道歉.我试图传达的是你可以存储Clients和Chatrooms 之间的关系,这样当Chatroom一个新的时候Post,它就可以只分发给Client与之相关的s.假设你有一个聊天室CR和3个客户端A,B以及C是全部CR.另外,假设我们有以下类:
class Chatroom
{
Guid Id { get; set; }
List<Client> Subscribers { get; set; }
List<Posts> Posts { get; set; }
}
class Client
{
Guid Id { get; set; }
List<Chatroom> Chatrooms { get; set; }
ConnectionInfo Info { get; set; }
}
class Post
{
Guid Id { get; set; }
Guid ClientId { get; set; }
Guid ChatroomId { get; set; }
string Text { get; set; }
}
class NewPostCommand : ICommand
{
Post NewPost { get; set; }
}
class NewChatroomPostEvent : IEvent
{
Post NewPost { get; set; }
Chatroom Chatroom { get; set; }
List<Client> Subscribers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
A创建一个Postto CR,这是使用从客户端到API的HTTP调用实现的.API是用作ClientService的NServiceBus服务的一部分.API调用创建一个Post包含文本的文本A.Id,和CR.Id.NewPostCommandto 发送to .ChatroomServicePostNewPostCommand并将其传递给适当的处理程序.Chatroom使用ChatroomIdon来搜索数据库中的相应(CR)Post.新Post增加到CR.Posts并更新数据库.CR.Clients减号列表.Post.ClientIdCRBCNewChatroomPostEvent包含Post,Chatroom和Subscribers.NewChatroomPostEvent,接收消息并将其传递给approriate处理程序.Client.Info)通信的所有功能,并将新内容发送Post到NewChatroomPostEvent.Subscribers列表中的每个客户端(B和C).现在我们已经浏览了新帖子的消息流,您可以想象如何处理从每个聊天室添加和删除订阅者的方法.客户端在进入或离开聊天室时会向HTTP API发送消息,ClientService会向ChatroomService发送消息,该消息将更新相应的Chatroom.Subscribers列表.希望这能说明您在新帖到达时如何控制哪些客户端发送更新.
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |