001/** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.camel.spi; 018 019import java.util.Collection; 020 021import org.apache.camel.Endpoint; 022import org.apache.camel.Exchange; 023import org.apache.camel.StaticService; 024 025/** 026 * A repository which tracks in flight {@link Exchange}s. 027 * 028 * @version 029 */ 030public interface InflightRepository extends StaticService { 031 032 /** 033 * Information about the inflight exchange. 034 */ 035 interface InflightExchange { 036 037 /** 038 * The exchange being inflight 039 */ 040 Exchange getExchange(); 041 042 /** 043 * The duration in millis the exchange has been inflight 044 */ 045 long getDuration(); 046 047 /** 048 * The elapsed time in millis processing the exchange at the current node 049 */ 050 long getElapsed(); 051 052 /** 053 * The id of the node from the route where the exchange currently is being processed 054 * <p/> 055 * Is <tt>null</tt> if message history is disabled. 056 */ 057 String getNodeId(); 058 059 /** 060 * The id of the route where the exchange originates (started) 061 */ 062 String getFromRouteId(); 063 064 /** 065 * The id of the route where the exchange currently is being processed 066 * <p/> 067 * Is <tt>null</tt> if message history is disabled. 068 * @deprecated use {@link #getAtRouteId()} 069 */ 070 @Deprecated 071 String getRouteId(); 072 073 /** 074 * The id of the route where the exchange currently is being processed 075 * <p/> 076 * Is <tt>null</tt> if message history is disabled. 077 */ 078 String getAtRouteId(); 079 080 } 081 082 /** 083 * Adds the exchange to the inflight registry to the total counter 084 * 085 * @param exchange the exchange 086 */ 087 void add(Exchange exchange); 088 089 /** 090 * Removes the exchange from the inflight registry to the total counter 091 * 092 * @param exchange the exchange 093 */ 094 void remove(Exchange exchange); 095 096 /** 097 * Adds the exchange to the inflight registry associated to the given route 098 * 099 * @param exchange the exchange 100 * @param routeId the id of the route 101 */ 102 void add(Exchange exchange, String routeId); 103 104 /** 105 * Removes the exchange from the inflight registry removing association to the given route 106 * 107 * @param exchange the exchange 108 * @param routeId the id of the route 109 */ 110 void remove(Exchange exchange, String routeId); 111 112 /** 113 * Current size of inflight exchanges. 114 * <p/> 115 * Will return 0 if there are no inflight exchanges. 116 * 117 * @return number of exchanges currently in flight. 118 */ 119 int size(); 120 121 /** 122 * Will always return 0 due method is deprecated. 123 * @deprecated will be removed in a future Camel release. 124 */ 125 @Deprecated 126 int size(Endpoint endpoint); 127 128 /** 129 * Removes the route from the in flight registry. 130 * <p/> 131 * Is used for cleaning up resources to avoid leaking. 132 * 133 * @param routeId the id of the route 134 */ 135 void removeRoute(String routeId); 136 137 /** 138 * Current size of inflight exchanges which are from the given route. 139 * <p/> 140 * Will return 0 if there are no inflight exchanges. 141 * 142 * @param routeId the id of the route 143 * @return number of exchanges currently in flight. 144 */ 145 int size(String routeId); 146 147 /** 148 * A <i>read-only</i> browser of the {@link InflightExchange}s that are currently inflight. 149 */ 150 Collection<InflightExchange> browse(); 151 152 /** 153 * A <i>read-only</i> browser of the {@link InflightExchange}s that are currently inflight that started from the given route. 154 * 155 * @param fromRouteId the route id, or <tt>null</tt> for all routes. 156 */ 157 Collection<InflightExchange> browse(String fromRouteId); 158 159 /** 160 * A <i>read-only</i> browser of the {@link InflightExchange}s that are currently inflight. 161 * 162 * @param limit maximum number of entries to return 163 * @param sortByLongestDuration to sort by the longest duration. Set to <tt>true</tt> to include the exchanges that has been inflight the longest time, 164 * set to <tt>false</tt> to sort by exchange id 165 */ 166 Collection<InflightExchange> browse(int limit, boolean sortByLongestDuration); 167 168 /** 169 * A <i>read-only</i> browser of the {@link InflightExchange}s that are currently inflight that started from the given route. 170 * 171 * @param fromRouteId the route id, or <tt>null</tt> for all routes. 172 * @param limit maximum number of entries to return 173 * @param sortByLongestDuration to sort by the longest duration. Set to <tt>true</tt> to include the exchanges that has been inflight the longest time, 174 * set to <tt>false</tt> to sort by exchange id 175 */ 176 Collection<InflightExchange> browse(String fromRouteId, int limit, boolean sortByLongestDuration); 177 178}