From dev-return-69713-archive-asf-public=cust-asf.ponee.io@activemq.apache.org Fri Feb 1 03:01:57 2019 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx-eu-01.ponee.io (Postfix) with SMTP id 8AED518067E for ; Fri, 1 Feb 2019 04:01:56 +0100 (CET) Received: (qmail 81061 invoked by uid 500); 1 Feb 2019 03:01:54 -0000 Mailing-List: contact dev-help@activemq.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@activemq.apache.org Delivered-To: mailing list dev@activemq.apache.org Received: (qmail 81050 invoked by uid 99); 1 Feb 2019 03:01:54 -0000 Received: from ec2-52-202-80-70.compute-1.amazonaws.com (HELO gitbox.apache.org) (52.202.80.70) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 01 Feb 2019 03:01:54 +0000 From: GitBox To: dev@activemq.apache.org Subject: =?utf-8?q?=5BGitHub=5D_michaelandrepearce_commented_on_a_change_in_pull_r?= =?utf-8?q?equest_=232528=3A_ARTEMIS-2226_last_consumer_connection_should_?= =?utf-8?q?close_the_previous_consu=E2=80=A6?= Message-ID: <154899011420.25533.12170189176694652246.gitbox@gitbox.apache.org> Date: Fri, 01 Feb 2019 03:01:54 -0000 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit michaelandrepearce commented on a change in pull request #2528: ARTEMIS-2226 last consumer connection should close the previous consu… URL: https://github.com/apache/activemq-artemis/pull/2528#discussion_r252920340 ########## File path: artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTProtocolManager.java ########## @@ -62,11 +73,44 @@ List outgoingInterceptors) { this.server = server; this.updateInterceptors(incomingInterceptors, outgoingInterceptors); + server.getManagementService().addNotificationListener(this); } @Override public void onNotification(Notification notification) { - // TODO handle notifications + if (!(notification.getType() instanceof CoreNotificationType)) + return; + + CoreNotificationType type = (CoreNotificationType) notification.getType(); + if (type != CONSUMER_CREATED) + return; + + TypedProperties props = notification.getProperties(); + + SimpleString protocolName = props.getSimpleStringProperty(ManagementHelper.HDR_PROTOCOL_NAME); + + if (protocolName == null || !protocolName.toString().equals(MQTTProtocolManagerFactory.MQTT_PROTOCOL_NAME)) + return; + + int distance = props.getIntProperty(ManagementHelper.HDR_DISTANCE); + + if (distance > 0) { + SimpleString queueName = props.getSimpleStringProperty(ManagementHelper.HDR_ROUTING_NAME); + + Binding binding = server.getPostOffice().getBinding(queueName); + if (binding != null) { + Queue queue = (Queue) binding.getBindable(); + String clientId = props.getSimpleStringProperty(ManagementHelper.HDR_CLIENT_ID).toString(); + //If the client ID represents a client already connected to the server then the server MUST disconnect the existing client. + //Avoid consumers with the same client ID in the cluster appearing at different nodes at the same time + Collection consumersSet = queue.getConsumers(); + for (Consumer consumer : consumersSet) { + ServerConsumerImpl serverConsumer = (ServerConsumerImpl) consumer; + if (clientId.equals(serverConsumer.getConnectionClientID())) + serverConsumer.getRemotingConnection().destroy(); Review comment: @onlyMIT but re your top level options: > Add a new cluster notification when the client’s connections connect to Artemis, close existing connections that use the same clientId when processing cluster-notification. This solution is the best way to address the MQTT agreement.But I don't think it's necessary to solve this problem by sending a cluster-notification every time client connect. There already is a cluster-notification sent every time a client connects if using NotificationActiveMQServerPlugin, so if anything simply we could just make that more built in, like consumer one is, and simply make it enable the flag sendConnectionNotifications, if MQTT protocol is used (keeping it as is today disabling for those who have not enabled MQTT) ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: users@infra.apache.org With regards, Apache Git Services