/* * 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.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.utils.ReusableLatch; public interface RemotingService { /** * Remove a connection from the connections held by the remoting service. * <strong>This method must be used only from the management API. * RemotingConnections are removed from the remoting service when their connectionTTL is hit.</strong> * * @param remotingConnectionID the ID of the RemotingConnection to removed * @return the removed RemotingConnection */ RemotingConnection removeConnection(Object remotingConnectionID); Set<RemotingConnection> getConnections(); long getTotalConnectionCount(); ReusableLatch getConnectionCountLatch(); void addIncomingInterceptor(BaseInterceptor interceptor); List<BaseInterceptor> getIncomingInterceptors(); void addOutgoingInterceptor(BaseInterceptor interceptor); List<BaseInterceptor> 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<String, ProtocolManagerFactory> getProtocolFactoryMap(); /** * Allow acceptors to use this as their default security Principal if applicable. * <p> * 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; }