mirror of
				https://github.com/node-red/node-red-nodes.git
				synced 2025-03-01 10:37:43 +00:00 
			
		
		
		
	STOMP bugfix: usage of multiple stomp in nodes (#1015)
* Bugfix: only execute node register callbacks after connection to the server has been made * Bugfix: only execute direct callback of register node register when connected to STOMP server * Doc: Add tip about reconnection to server
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							a2b7e1a30c
						
					
				
				
					commit
					45b43ebb21
				
			@@ -16,7 +16,7 @@
 | 
			
		||||
            <option value="client-individual">Client individual (only v1.1)</option>
 | 
			
		||||
        </select>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-tips">
 | 
			
		||||
    <div class="form-tips" style="margin-bottom: 12px;">
 | 
			
		||||
        Enabling the ACK (acknowledgment) will set the <code>ack</code> header to <code>client</code> while subscribing to topics. 
 | 
			
		||||
        This means the items on the broker queue will not be dequeue'd unless an ACK message is sent using the <code>ack</code> node.
 | 
			
		||||
    </div>
 | 
			
		||||
@@ -73,7 +73,7 @@
 | 
			
		||||
        <label for="node-input-name" style="width: 110px;"><i class="fa fa-tag"></i> Name</label>
 | 
			
		||||
        <input type="text" id="node-input-name" placeholder="Name">
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-tips">The <b>Destination</b> field is optional. If not set uses the <code>msg.topic</code>
 | 
			
		||||
    <div class="form-tips" style="margin-bottom: 12px;">The <b>Destination</b> field is optional. If not set uses the <code>msg.topic</code>
 | 
			
		||||
    property of the message.</div>
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
@@ -147,6 +147,9 @@
 | 
			
		||||
        <label for="node-config-input-reconnectdelay"><i class="fa fa-clock-o"></i> Reconnect Delay (S)</label>
 | 
			
		||||
        <input type="number" id="node-config-input-reconnectdelay" />
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-tips" style="margin-bottom: 12px;">
 | 
			
		||||
        Reconnection timings are calculated using exponential backoff. The first reconnection happens immediately, the second reconnection happens at +delay ms, the third at + 2*delay ms, etc.
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-row">
 | 
			
		||||
        <label for="node-config-input-name"><i class="fa fa-tag"></i> Name</label>
 | 
			
		||||
        <input type="text" id="node-config-input-name" placeholder="Name">
 | 
			
		||||
 
 | 
			
		||||
@@ -84,6 +84,8 @@ module.exports = function(RED) {
 | 
			
		||||
        node.sessionId = null;
 | 
			
		||||
        node.subscribtionIndex = 1;
 | 
			
		||||
        node.subscriptionIds = {};
 | 
			
		||||
        /** Array of callbacks to be called once the connection to the broker has been made */
 | 
			
		||||
        node.connectedCallbacks = [];
 | 
			
		||||
        /** @type { StompClient } */
 | 
			
		||||
        node.client;
 | 
			
		||||
        node.setOptions = function(options, init) {
 | 
			
		||||
@@ -134,10 +136,20 @@ module.exports = function(RED) {
 | 
			
		||||
         */
 | 
			
		||||
        node.register = function(stompNode, callback = () => {}) {
 | 
			
		||||
            node.users[stompNode.id] = stompNode;
 | 
			
		||||
            
 | 
			
		||||
            if (!node.connected) {
 | 
			
		||||
                node.connectedCallbacks.push(callback);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Auto connect when first STOMP processing node is added
 | 
			
		||||
            if (Object.keys(node.users).length === 1) {
 | 
			
		||||
                node.connect(callback);
 | 
			
		||||
            } else {
 | 
			
		||||
                node.connect(() => {
 | 
			
		||||
                    while (node.connectedCallbacks.length) {
 | 
			
		||||
                        node.connectedCallbacks.shift().call();
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
            } else if (node.connected) {
 | 
			
		||||
                // Execute callback directly as the connection to the STOMP server has already been made
 | 
			
		||||
                callback();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user