Closed BEWINDOWEB closed 5 years ago
开启集群后: 1)Publish -> processPublish -> internalCommunication.internalSend(internalMessage); 会广播一条消息,然后Broker各自收到消息判断是否在自己节点,然后下发消息。 Publish -> processPublish -> this.sendPublishMessage 正常发送消息。
如果Client1和Client2连接到同一个Broker,开启集群,Client1发送Client2订阅的主题,Client2除了集群收到一条,还会本地收到一条,产生两条信息造成重复。
解决: InternalMessage增加BrokerId信息,判断是不是自己Broker 或者第二条send判断一下是否是集群模式,是就不发。
开启集群后: 1)Publish -> processPublish -> internalCommunication.internalSend(internalMessage); 会广播一条消息,然后Broker各自收到消息判断是否在自己节点,然后下发消息。 Publish -> processPublish -> this.sendPublishMessage 正常发送消息。
如果Client1和Client2连接到同一个Broker,开启集群,Client1发送Client2订阅的主题,Client2除了集群收到一条,还会本地收到一条,产生两条信息造成重复。
解决: InternalMessage增加BrokerId信息,判断是不是自己Broker 或者第二条send判断一下是否是集群模式,是就不发。