001 /*
002 * Copyright 2009 Red Hat, Inc.
003 * Red Hat licenses this file to you under the Apache License, version
004 * 2.0 (the "License"); you may not use this file except in compliance
005 * with the License. You may obtain a copy of the License at
006 * http://www.apache.org/licenses/LICENSE-2.0
007 * Unless required by applicable law or agreed to in writing, software
008 * distributed under the License is distributed on an "AS IS" BASIS,
009 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
010 * implied. See the License for the specific language governing
011 * permissions and limitations under the License.
012 */
013
014 package org.hornetq.api.core.management;
015
016 import java.util.Map;
017
018 import javax.management.MBeanOperationInfo;
019
020
021 /**
022 * A QueueControl is used to manage a queue.
023 *
024 * @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
025 */
026 public interface QueueControl
027 {
028 // Attributes ----------------------------------------------------
029
030 /**
031 * Returns the name of this queue.
032 */
033 String getName();
034
035 /**
036 * Returns the address this queue is bound to.
037 */
038 String getAddress();
039
040 /**
041 * Returns this queue ID.
042 */
043 long getID();
044
045 /**
046 * Returns whether this queue is temporary.
047 */
048 boolean isTemporary();
049
050 /**
051 * Returns whether this queue is durable.
052 */
053 boolean isDurable();
054
055 /**
056 * Returns the filter associated to this queue.
057 */
058 String getFilter();
059
060 /**
061 * Returns the number of messages currently in this queue.
062 */
063 long getMessageCount();
064
065 /**
066 * Returns the number of scheduled messages in this queue.
067 */
068 long getScheduledCount();
069
070 /**
071 * Returns the number of consumers consuming messages from this queue.
072 */
073 int getConsumerCount();
074
075 /**
076 * Returns the number of messages that this queue is currently delivering to its consumers.
077 */
078 int getDeliveringCount();
079
080 /**
081 * Returns the number of messages added to this queue since it was created.
082 */
083 long getMessagesAdded();
084
085 /**
086 * Returns the expiry address associated to this queue.
087 */
088 String getExpiryAddress();
089
090 /**
091 * Sets the expiry address associated to this queue to the specified expiryAddress.
092 */
093 void setExpiryAddress(@Parameter(name = "expiryAddress", desc = "Expiry address of the queue") String expiryAddres) throws Exception;
094
095 /**
096 * Returns the dead-letter address associated to this queue.
097 */
098 String getDeadLetterAddress();
099
100 /**
101 * Sets the dead-letter address associated to this queue to the specified deadLetterAddress.
102 */
103 void setDeadLetterAddress(@Parameter(name = "deadLetterAddress", desc = "Dead-letter address of the queue") String deadLetterAddress) throws Exception;
104
105 // Operations ----------------------------------------------------
106
107 /**
108 * Lists all the messages scheduled for delivery for this queue.
109 * <br>
110 * 1 Map represents 1 message, keys are the message's properties and headers, values are the corresponding values.
111 */
112 @Operation(desc = "List the messages scheduled for delivery", impact = MBeanOperationInfo.INFO)
113 Map<String, Object>[] listScheduledMessages() throws Exception;
114
115 /**
116 * Lists all the messages scheduled for delivery for this queue using JSON serialization.
117 */
118 @Operation(desc = "List the messages scheduled for delivery and returns them using JSON", impact = MBeanOperationInfo.INFO)
119 String listScheduledMessagesAsJSON() throws Exception;
120
121 /**
122 * Lists all the messages in this queue matching the specified filter.
123 * <br>
124 * 1 Map represents 1 message, keys are the message's properties and headers, values are the corresponding values.
125 * <br>
126 * Using {@code null} or an empty filter will list <em>all</em> messages from this queue.
127 */
128 @Operation(desc = "List all the messages in the queue matching the given filter", impact = MBeanOperationInfo.INFO)
129 Map<String, Object>[] listMessages(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filter) throws Exception;
130
131 /**
132 * Lists all the messages in this queue matching the specified filter using JSON serialization.
133 * <br>
134 * Using {@code null} or an empty filter will list <em>all</em> messages from this queue.
135 */
136 @Operation(desc = "List all the messages in the queue matching the given filter and returns them using JSON", impact = MBeanOperationInfo.INFO)
137 String listMessagesAsJSON(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filter) throws Exception;
138
139 /**
140 * Counts the number of messages in this queue matching the specified filter.
141 * <br>
142 * Using {@code null} or an empty filter will count <em>all</em> messages from this queue.
143 */
144 @Operation(desc = "Returns the number of the messages in the queue matching the given filter", impact = MBeanOperationInfo.INFO)
145 long countMessages(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filter) throws Exception;
146
147 /**
148 * Removes the message corresponding to the specified message ID.
149 *
150 * @return {@code true} if the message was removed, {@code false} else
151 */
152 @Operation(desc = "Remove the message corresponding to the given messageID", impact = MBeanOperationInfo.ACTION)
153 boolean removeMessage(@Parameter(name = "messageID", desc = "A message ID") long messageID) throws Exception;
154
155 /**
156 * Removes all the message corresponding to the specified filter.
157 * <br>
158 * Using {@code null} or an empty filter will remove <em>all</em> messages from this queue.
159 *
160 * @return the number of removed messages
161 */
162 @Operation(desc = "Remove the messages corresponding to the given filter (and returns the number of removed messages)", impact = MBeanOperationInfo.ACTION)
163 int removeMessages(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filter) throws Exception;
164
165 /**
166 * Expires all the message corresponding to the specified filter.
167 * <br>
168 * Using {@code null} or an empty filter will expire <em>all</em> messages from this queue.
169 *
170 * @return the number of expired messages
171 */
172 @Operation(desc = "Expire the messages corresponding to the given filter (and returns the number of expired messages)", impact = MBeanOperationInfo.ACTION)
173 int expireMessages(@Parameter(name = "filter", desc = "A message filter") String filter) throws Exception;
174
175 /**
176 * Expires the message corresponding to the specified message ID.
177 *
178 * @return {@code true} if the message was expired, {@code false} else
179 */
180 @Operation(desc = "Remove the message corresponding to the given messageID", impact = MBeanOperationInfo.ACTION)
181 boolean expireMessage(@Parameter(name = "messageID", desc = "A message ID") long messageID) throws Exception;
182
183 /**
184 * Moves the message corresponding to the specified message ID to the specified other queue.
185 *
186 * @return {@code true} if the message was moved, {@code false} else
187 */
188 @Operation(desc = "Move the message corresponding to the given messageID to another queue. rejectDuplicate=false on this case", impact = MBeanOperationInfo.ACTION)
189 boolean moveMessage(@Parameter(name = "messageID", desc = "A message ID") long messageID,
190 @Parameter(name = "otherQueueName", desc = "The name of the queue to move the message to") String otherQueueName) throws Exception;
191
192 /**
193 * Moves the message corresponding to the specified message ID to the specified other queue.
194 *
195 * @return {@code true} if the message was moved, {@code false} else
196 */
197 @Operation(desc = "Move the message corresponding to the given messageID to another queue", impact = MBeanOperationInfo.ACTION)
198 boolean moveMessage(@Parameter(name = "messageID", desc = "A message ID") long messageID,
199 @Parameter(name = "otherQueueName", desc = "The name of the queue to move the message to") String otherQueueName,
200 @Parameter(name = "rejectDuplicates", desc = "Reject messages identified as duplicate by the duplicate message") boolean rejectDuplicates) throws Exception;
201
202 /**
203 * Moves all the message corresponding to the specified filter to the specified other queue.
204 * RejectDuplicates = false on this case
205 * <br>
206 * Using {@code null} or an empty filter will move <em>all</em> messages from this queue.
207 *
208 * @return the number of moved messages
209 */
210 @Operation(desc = "Move the messages corresponding to the given filter (and returns the number of moved messages). RejectDuplicates=false on this case.", impact = MBeanOperationInfo.ACTION)
211 int moveMessages(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filter,
212 @Parameter(name = "otherQueueName", desc = "The name of the queue to move the messages to") String otherQueueName) throws Exception;
213
214
215 /**
216 * Moves all the message corresponding to the specified filter to the specified other queue.
217 * <br>
218 * Using {@code null} or an empty filter will move <em>all</em> messages from this queue.
219 *
220 * @return the number of moved messages
221 */
222 @Operation(desc = "Move the messages corresponding to the given filter (and returns the number of moved messages)", impact = MBeanOperationInfo.ACTION)
223 int moveMessages(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filter,
224 @Parameter(name = "otherQueueName", desc = "The name of the queue to move the messages to") String otherQueueName,
225 @Parameter(name = "rejectDuplicates", desc = "Reject messages identified as duplicate by the duplicate message") boolean rejectDuplicates) throws Exception;
226
227 /**
228 * Sends the message corresponding to the specified message ID to this queue's dead letter address.
229 *
230 * @return {@code true} if the message was sent to the dead letter address, {@code false} else
231 */
232 @Operation(desc = "Send the message corresponding to the given messageID to this queue's Dead Letter Address", impact = MBeanOperationInfo.ACTION)
233 boolean sendMessageToDeadLetterAddress(@Parameter(name = "messageID", desc = "A message ID") long messageID) throws Exception;
234
235 /**
236 * Sends all the message corresponding to the specified filter to this queue's dead letter address.
237 * <br>
238 * Using {@code null} or an empty filter will send <em>all</em> messages from this queue.
239 *
240 * @return the number of sent messages
241 */
242 @Operation(desc = "Send the messages corresponding to the given filter to this queue's Dead Letter Address", impact = MBeanOperationInfo.ACTION)
243 int sendMessagesToDeadLetterAddress(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filterStr) throws Exception;
244
245 /**
246 * Changes the message's priority corresponding to the specified message ID to the specified priority.
247 *
248 * @param newPriority between 0 and 9 inclusive.
249 *
250 * @return {@code true} if the message priority was changed
251 */
252 @Operation(desc = "Change the priority of the message corresponding to the given messageID", impact = MBeanOperationInfo.ACTION)
253 boolean changeMessagePriority(@Parameter(name = "messageID", desc = "A message ID") long messageID,
254 @Parameter(name = "newPriority", desc = "the new priority (between 0 and 9)") int newPriority) throws Exception;
255
256 /**
257 * Changes the priority for all the message corresponding to the specified filter to the specified priority.
258 * <br>
259 * Using {@code null} or an empty filter will change <em>all</em> messages from this queue.
260 *
261 * @return the number of changed messages
262 */
263 @Operation(desc = "Change the priority of the messages corresponding to the given filter", impact = MBeanOperationInfo.ACTION)
264 int changeMessagesPriority(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filter,
265 @Parameter(name = "newPriority", desc = "the new priority (between 0 and 9)") int newPriority) throws Exception;
266
267 /**
268 * Lists the message counter for this queue.
269 */
270 @Operation(desc = "List the message counters", impact = MBeanOperationInfo.INFO)
271 String listMessageCounter() throws Exception;
272
273 /**
274 * Resets the message counter for this queue.
275 */
276 @Operation(desc = "Reset the message counters", impact = MBeanOperationInfo.INFO)
277 void resetMessageCounter() throws Exception;
278
279 /**
280 * Lists the message counter for this queue as a HTML table.
281 */
282 @Operation(desc = "List the message counters as HTML", impact = MBeanOperationInfo.INFO)
283 String listMessageCounterAsHTML() throws Exception;
284
285 /**
286 * Lists the message counter history for this queue.
287 */
288 @Operation(desc = "List the message counters history", impact = MBeanOperationInfo.INFO)
289 String listMessageCounterHistory() throws Exception;
290
291 /**
292 * Lists the message counter history for this queue as a HTML table.
293 */
294 @Operation(desc = "List the message counters history HTML", impact = MBeanOperationInfo.INFO)
295 String listMessageCounterHistoryAsHTML() throws Exception;
296
297 /**
298 * Pauses the queue. Messages are no longer delivered to its consumers.
299 */
300 @Operation(desc = "Pauses the Queue", impact = MBeanOperationInfo.ACTION)
301 void pause() throws Exception;
302
303 /**
304 * Resumes the queue. Messages are again delivered to its consumers.
305 */
306 @Operation(desc = "Resumes delivery of queued messages and gets the queue out of paused state.", impact = MBeanOperationInfo.ACTION)
307 void resume() throws Exception;
308
309 @Operation(desc = "List all the existent consumers on the Queue")
310 String listConsumersAsJSON() throws Exception;
311
312 /**
313 * Returns whether the queue is paused.
314 */
315 @Operation(desc = "Inspects if the queue is paused", impact = MBeanOperationInfo.INFO)
316 boolean isPaused() throws Exception;
317 }