我最近开始学习可伸缩和企业计算机体系结构的细微差别,其中的核心组件之一是消息传递队列。为了从任何编程范例中学到最多的知识,我试图实现自己的消息传递队列服务版本。
到目前为止,我的最初设计是在线程套接字侦听器上运行的,但是为了防止同一消息被两个单独的处理节点下载两次,消息队列索引寄存器在启动读取时被锁定,并在该寄存器被锁定后解锁。更新。这样,就不需要对其进行线程化,并且意味着基于正在运行消息传递队列服务的服务器的处理速度,可伸缩系统的大小存在上限。
解决此问题的方法是在多个服务器上运行消息队列服务,但这将增加两次下载同一条消息的可能性。防止发生此类问题的唯一方法是包括一个撤消回调(该撤消回调(在服务器甚至单个服务器上的线程已同步其信息并检测到此类重新发布之后)将命令处理节点停止其运行。当前作业,然后重新查询消息队列以获取下一条消息,但是同样,还会有一个上限,在该上限中,大多数正在发送的流量将是同步和吊销回调,从而导致瓶颈并减慢了信息处理的速度,因此许多处理节点将执行空操作并浪费时间。
我能想到的解决此问题的最后一种方法是,使每个消息队列服务器(以及每个服务器上的每个线程)在队列中查找的位置具有特定的偏移量,但这可能会基于类型的应用程序,特别是如果要求以特定顺序进行处理时。
因此,话虽这么说,是否有任何消息队列体系结构设计可以向我展示现有的企业级消息队列服务如何避免这些问题?