org.apache.activemq.artemis.core.remoting.server.RemotingService Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.artemis.core.remoting.server;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.activemq.artemis.api.core.BaseInterceptor;
import org.apache.activemq.artemis.api.core.TransportConfiguration;
import org.apache.activemq.artemis.core.protocol.core.CoreRemotingConnection;
import org.apache.activemq.artemis.core.security.ActiveMQPrincipal;
import org.apache.activemq.artemis.core.server.ActiveMQComponent;
import org.apache.activemq.artemis.spi.core.protocol.ConnectionEntry;
import org.apache.activemq.artemis.spi.core.protocol.ProtocolManagerFactory;
import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
import org.apache.activemq.artemis.spi.core.remoting.Acceptor;
import org.apache.activemq.artemis.spi.core.remoting.Connection;
import org.apache.activemq.artemis.utils.ReusableLatch;
public interface RemotingService {
/**
* Remove a connection from the connections held by the remoting service.
* This method must be used only from the management API.
* RemotingConnections are removed from the remoting service when their connectionTTL is hit.
*
* @param remotingConnectionID the ID of the RemotingConnection to removed
* @return the removed RemotingConnection
*/
RemotingConnection removeConnection(Object remotingConnectionID);
Set getConnections();
/**
* @return the number of clients connected to this server.
*/
default int getConnectionCount() {
final Set connections = getConnections();
return connections == null ? 0 : getConnections().size();
}
/**
* @return the number of clients which have connected to this server since it was started.
*/
long getTotalConnectionCount();
ReusableLatch getConnectionCountLatch();
void addIncomingInterceptor(BaseInterceptor interceptor);
List getIncomingInterceptors();
void addOutgoingInterceptor(BaseInterceptor interceptor);
List getOutgoinInterceptors();
boolean removeIncomingInterceptor(BaseInterceptor interceptor);
boolean removeOutgoingInterceptor(BaseInterceptor interceptor);
void stop(boolean criticalError) throws Exception;
void start() throws Exception;
void startAcceptors() throws Exception;
boolean isStarted();
Map getProtocolFactoryMap();
/**
* Allow acceptors to use this as their default security Principal if applicable.
*
* Used by AS7 integration code.
*
* @param principal
*/
void allowInvmSecurityOverride(ActiveMQPrincipal principal);
/**
* Pauses the acceptors so that no more connections can be made to the server
*/
void pauseAcceptors();
/**
* Pauses the acceptors so that no more connections can be made to the server
*/
boolean isPaused();
/**
* Freezes and then disconnects all connections except the given one and tells the client where else
* it might connect (only applicable if server is in a cluster and uses scaleDown-on-failover=true).
*
* @param scaleDownNodeID
* @param remotingConnection
*/
void freeze(String scaleDownNodeID, CoreRemotingConnection remotingConnection);
/**
* Returns the acceptor identified by its {@code name} or {@code null} if it does not exists.
*
* @param name the name of the acceptor
*/
Acceptor getAcceptor(String name);
Acceptor createAcceptor(String name, String uri) throws Exception;
Acceptor createAcceptor(TransportConfiguration transportConfiguration);
void destroyAcceptor(String name) throws Exception;
void loadProtocolServices(List protocolServices);
void addConnectionEntry(Connection connection, ConnectionEntry entry);
}