/* * 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.api.core.client; import javax.transaction.xa.XAResource; import java.util.List; import java.util.Set; import org.apache.activemq.artemis.api.core.ActiveMQException; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.api.core.RoutingType; /** * A ClientSession is a single-thread object required for producing and consuming messages. */ public interface ClientSession extends XAResource, AutoCloseable { /** * This is used to identify a ClientSession as used by the JMS Layer * The JMS Layer will add this through Meta-data, so the server or management layers * can identify session created over core API purely or through the JMS Layer */ String JMS_SESSION_IDENTIFIER_PROPERTY = "jms-session"; /** * Just like {@link ClientSession.AddressQuery#JMS_SESSION_IDENTIFIER_PROPERTY} this is * used to identify the ClientID over JMS Session. * However this is only used when the JMS Session.clientID is set (which is optional). * With this property management tools and the server can identify the jms-client-id used over JMS */ String JMS_SESSION_CLIENT_ID_PROPERTY = "jms-client-id"; /** * Information returned by a binding query * * @see ClientSession#addressQuery(SimpleString) */ public interface AddressQuery { /** * Returns <code>true</code> if the binding exists, <code>false</code> else. */ boolean isExists(); /** * Returns the names of the queues bound to the binding. */ List<SimpleString> getQueueNames(); /** * Returns <code>true</code> if auto-queue-creation for this address is enabled, <code>false</code> else. */ boolean isAutoCreateQueues(); /** * Returns <code>true</code> if auto-address-creation for this address is enabled, <code>false</code> else. */ boolean isAutoCreateAddresses(); boolean isDefaultPurgeOnNoConsumers(); int getDefaultMaxConsumers(); } /** * Information returned by a queue query * * @see ClientSession#queueQuery(SimpleString) */ public interface QueueQuery { /** * Returns <code>true</code> if the queue exists, <code>false</code> else. */ boolean isExists(); /** * Return <code>true</code> if the queue is temporary, <code>false</code> else. */ boolean isTemporary(); /** * Returns <code>true</code> if the queue is durable, <code>false</code> else. */ boolean isDurable(); /** * Returns <code>true</code> if auto-creation for this queue is enabled and if the queue queried is a JMS queue, * <code>false</code> else. */ boolean isAutoCreateQueues(); /** * Returns the number of consumers attached to the queue. */ int getConsumerCount(); /** * Returns the number of messages in the queue. */ long getMessageCount(); /** * Returns the queue's filter string (or {@code null} if the queue has no filter). */ SimpleString getFilterString(); /** * Returns the address that the queue is bound to. */ SimpleString getAddress(); /** * Return the name of the queue * * @return */ SimpleString getName(); RoutingType getRoutingType(); int getMaxConsumers(); boolean isPurgeOnNoConsumers(); boolean isAutoCreated(); } // Lifecycle operations ------------------------------------------ /** * Starts the session. * The session must be started before ClientConsumers created by the session can consume messages from the queue. * * @throws ActiveMQException if an exception occurs while starting the session */ ClientSession start() throws ActiveMQException; /** * Stops the session. * ClientConsumers created by the session can not consume messages when the session is stopped. * * @throws ActiveMQException if an exception occurs while stopping the session */ void stop() throws ActiveMQException; /** * Closes the session. * * @throws ActiveMQException if an exception occurs while closing the session */ @Override void close() throws ActiveMQException; /** * Returns whether the session is closed or not. * * @return <code>true</code> if the session is closed, <code>false</code> else */ boolean isClosed(); /** * Adds a FailureListener to the session which is notified if a failure occurs on the session. * * @param listener the listener to add */ void addFailureListener(SessionFailureListener listener); /** * Removes a FailureListener to the session. * * @param listener the listener to remove * @return <code>true</code> if the listener was removed, <code>false</code> else */ boolean removeFailureListener(SessionFailureListener listener); /** * Adds a FailoverEventListener to the session which is notified if a failover event occurs on the session. * * @param listener the listener to add */ void addFailoverListener(FailoverEventListener listener); /** * Removes a FailoverEventListener to the session. * * @param listener the listener to remove * @return <code>true</code> if the listener was removed, <code>false</code> else */ boolean removeFailoverListener(FailoverEventListener listener); /** * Returns the server's incrementingVersion. * * @return the server's <code>incrementingVersion</code> */ int getVersion(); /** * Create Address with a single initial routing type * @param address * @param autoCreated * @throws ActiveMQException */ void createAddress(final SimpleString address, Set<RoutingType> routingTypes, final boolean autoCreated) throws ActiveMQException; /** * Create Address with a single initial routing type * @param address * @param routingType * @param autoCreated * @throws ActiveMQException */ void createAddress(final SimpleString address, RoutingType routingType, final boolean autoCreated) throws ActiveMQException; // Queue Operations ---------------------------------------------- /** * Creates a <em>non-temporary</em> queue. * * @param address the queue will be bound to this address * @param queueName the name of the queue * @param durable whether the queue is durable or not * @throws ActiveMQException in an exception occurs while creating the queue */ @Deprecated void createQueue(SimpleString address, SimpleString queueName, boolean durable) throws ActiveMQException; /** * Creates a transient queue. A queue that will exist as long as there are consumers. When the last consumer is closed the queue will be deleted * <p> * Notice: you will get an exception if the address or the filter doesn't match to an already existent queue * * @param address the queue will be bound to this address * @param queueName the name of the queue * @param durable if the queue is durable * @throws ActiveMQException in an exception occurs while creating the queue */ @Deprecated void createSharedQueue(SimpleString address, SimpleString queueName, boolean durable) throws ActiveMQException; /** * Creates a transient queue. A queue that will exist as long as there are consumers. When the last consumer is closed the queue will be deleted * <p> * Notice: you will get an exception if the address or the filter doesn't match to an already existent queue * * @param address the queue will be bound to this address * @param queueName the name of the queue * @param filter whether the queue is durable or not * @param durable if the queue is durable * @throws ActiveMQException in an exception occurs while creating the queue */ @Deprecated void createSharedQueue(SimpleString address, SimpleString queueName, SimpleString filter, boolean durable) throws ActiveMQException; /** * Creates a <em>non-temporary</em> queue. * * @param address the queue will be bound to this address * @param queueName the name of the queue * @param durable whether the queue is durable or not * @throws ActiveMQException in an exception occurs while creating the queue */ @Deprecated void createQueue(String address, String queueName, boolean durable) throws ActiveMQException; /** * Creates a <em>non-temporary</em> queue <em>non-durable</em> queue. * * @param address the queue will be bound to this address * @param queueName the name of the queue * @throws ActiveMQException in an exception occurs while creating the queue */ @Deprecated void createQueue(String address, String queueName) throws ActiveMQException; /** * Creates a <em>non-temporary</em> queue <em>non-durable</em> queue. * * @param address the queue will be bound to this address * @param queueName the name of the queue * @throws ActiveMQException in an exception occurs while creating the queue */ @Deprecated void createQueue(SimpleString address, SimpleString queueName) throws ActiveMQException; /** * Creates a <em>non-temporary</em> queue. * * @param address the queue will be bound to this address * @param queueName the name of the queue * @param filter only messages which match this filter will be put in the queue * @param durable whether the queue is durable or not * @throws ActiveMQException in an exception occurs while creating the queue */ @Deprecated void createQueue(SimpleString address, SimpleString queueName, SimpleString filter, boolean durable) throws ActiveMQException; /** * Creates a <em>non-temporary</em>queue. * * @param address the queue will be bound to this address * @param queueName the name of the queue * @param durable whether the queue is durable or not * @param filter only messages which match this filter will be put in the queue * @throws ActiveMQException in an exception occurs while creating the queue */ @Deprecated void createQueue(String address, String queueName, String filter, boolean durable) throws ActiveMQException; /** * Creates a <em>non-temporary</em> queue. * * @param address the queue will be bound to this address * @param queueName the name of the queue * @param filter only messages which match this filter will be put in the queue * @param durable whether the queue is durable or not * @param autoCreated whether to mark this queue as autoCreated or not * @throws ActiveMQException in an exception occurs while creating the queue */ @Deprecated void createQueue(SimpleString address, SimpleString queueName, SimpleString filter, boolean durable, boolean autoCreated) throws ActiveMQException; /** * Creates a <em>non-temporary</em>queue. * * @param address the queue will be bound to this address * @param queueName the name of the queue * @param filter only messages which match this filter will be put in the queue * @param durable whether the queue is durable or not * @param autoCreated whether to mark this queue as autoCreated or not * @throws ActiveMQException in an exception occurs while creating the queue */ @Deprecated void createQueue(String address, String queueName, String filter, boolean durable, boolean autoCreated) throws ActiveMQException; /** * Creates a <em>temporary</em> queue. * * @param address the queue will be bound to this address * @param queueName the name of the queue * @throws ActiveMQException in an exception occurs while creating the queue */ @Deprecated void createTemporaryQueue(SimpleString address, SimpleString queueName) throws ActiveMQException; /** * Creates a <em>temporary</em> queue. * * @param address the queue will be bound to this address * @param queueName the name of the queue * @throws ActiveMQException in an exception occurs while creating the queue */ @Deprecated void createTemporaryQueue(String address, String queueName) throws ActiveMQException; /** * Creates a <em>temporary</em> queue with a filter. * * @param address the queue will be bound to this address * @param queueName the name of the queue * @param filter only messages which match this filter will be put in the queue * @throws ActiveMQException in an exception occurs while creating the queue */ @Deprecated void createTemporaryQueue(SimpleString address, SimpleString queueName, SimpleString filter) throws ActiveMQException; /** * Creates a <em>temporary</em> queue with a filter. * * @param address the queue will be bound to this address * @param queueName the name of the queue * @param filter only messages which match this filter will be put in the queue * @throws ActiveMQException in an exception occurs while creating the queue */ @Deprecated void createTemporaryQueue(String address, String queueName, String filter) throws ActiveMQException; /** Deprecate **/ /** * Creates a <em>non-temporary</em> queue. * * @param address the queue will be bound to this address * @param routingType the delivery mode for this queue, MULTICAST or ANYCAST * @param queueName the name of the queue * @param durable whether the queue is durable or not * @throws ActiveMQException in an exception occurs while creating the queue */ void createQueue(SimpleString address, RoutingType routingType, SimpleString queueName, boolean durable) throws ActiveMQException; /** * Creates a transient queue. A queue that will exist as long as there are consumers. When the last consumer is closed the queue will be deleted * <p> * Notice: you will get an exception if the address or the filter doesn't match to an already existent queue * * @param address the queue will be bound to this address * @param routingType the delivery mode for this queue, MULTICAST or ANYCAST * @param queueName the name of the queue * @param durable if the queue is durable * @throws ActiveMQException in an exception occurs while creating the queue */ void createSharedQueue(SimpleString address, RoutingType routingType, SimpleString queueName, boolean durable) throws ActiveMQException; /** * Creates a transient queue. A queue that will exist as long as there are consumers. When the last consumer is closed the queue will be deleted * <p> * Notice: you will get an exception if the address or the filter doesn't match to an already existent queue * * @param address the queue will be bound to this address * @param routingType the delivery mode for this queue, MULTICAST or ANYCAST * @param queueName the name of the queue * @param filter whether the queue is durable or not * @param durable if the queue is durable * @throws ActiveMQException in an exception occurs while creating the queue */ void createSharedQueue(SimpleString address, RoutingType routingType, SimpleString queueName, SimpleString filter, boolean durable) throws ActiveMQException; /** * Creates a <em>non-temporary</em> queue. * * @param address the queue will be bound to this address * @param routingType the delivery mode for this queue, MULTICAST or ANYCAST * @param queueName the name of the queue * @param durable whether the queue is durable or not * @throws ActiveMQException in an exception occurs while creating the queue */ void createQueue(String address, RoutingType routingType, String queueName, boolean durable) throws ActiveMQException; /** * Creates a <em>non-temporary</em> queue <em>non-durable</em> queue. * * @param address the queue will be bound to this address * @param routingType the delivery mode for this queue, MULTICAST or ANYCAST * @param queueName the name of the queue * @throws ActiveMQException in an exception occurs while creating the queue */ void createQueue(String address, RoutingType routingType, String queueName) throws ActiveMQException; /** * Creates a <em>non-temporary</em> queue <em>non-durable</em> queue. * * @param address the queue will be bound to this address * @param routingType the delivery mode for this queue, MULTICAST or ANYCAST * @param queueName the name of the queue * @throws ActiveMQException in an exception occurs while creating the queue */ void createQueue(SimpleString address, RoutingType routingType, SimpleString queueName) throws ActiveMQException; /** * Creates a <em>non-temporary</em> queue. * * @param address the queue will be bound to this address * @param routingType the delivery mode for this queue, MULTICAST or ANYCAST * @param queueName the name of the queue * @param filter only messages which match this filter will be put in the queue * @param durable whether the queue is durable or not * @throws ActiveMQException in an exception occurs while creating the queue */ void createQueue(SimpleString address, RoutingType routingType, SimpleString queueName, SimpleString filter, boolean durable) throws ActiveMQException; /** * Creates a <em>non-temporary</em>queue. * * @param address the queue will be bound to this address * @param routingType the delivery mode for this queue, MULTICAST or ANYCAST * @param queueName the name of the queue * @param filter only messages which match this filter will be put in the queue * @param durable whether the queue is durable or not * @throws ActiveMQException in an exception occurs while creating the queue */ void createQueue(String address, RoutingType routingType, String queueName, String filter, boolean durable) throws ActiveMQException; /** * Creates a <em>non-temporary</em> queue. * * @param address the queue will be bound to this address * @param routingType the delivery mode for this queue, MULTICAST or ANYCAST * @param queueName the name of the queue * @param filter only messages which match this filter will be put in the queue * @param durable whether the queue is durable or not * @param autoCreated whether to mark this queue as autoCreated or not * @throws ActiveMQException in an exception occurs while creating the queue */ void createQueue(SimpleString address, RoutingType routingType, SimpleString queueName, SimpleString filter, boolean durable, boolean autoCreated) throws ActiveMQException; /** * Creates a <em>non-temporary</em> queue. * * @param address the queue will be bound to this address * @param routingType the delivery mode for this queue, MULTICAST or ANYCAST * @param queueName the name of the queue * @param filter only messages which match this filter will be put in the queue * @param durable whether the queue is durable or not * @param autoCreated whether to mark this queue as autoCreated or not * @param maxConsumers how many concurrent consumers will be allowed on this queue * @param purgeOnNoConsumers whether to delete the contents of the queue when the last consumer disconnects * @throws ActiveMQException */ void createQueue(SimpleString address, RoutingType routingType, SimpleString queueName, SimpleString filter, boolean durable, boolean autoCreated, int maxConsumers, boolean purgeOnNoConsumers) throws ActiveMQException; /** * Creates a <em>non-temporary</em>queue. * * @param address the queue will be bound to this address * @param routingType the delivery mode for this queue, MULTICAST or ANYCAST * @param queueName the name of the queue * @param filter only messages which match this filter will be put in the queue * @param durable whether the queue is durable or not * @param autoCreated whether to mark this queue as autoCreated or not * @throws ActiveMQException in an exception occurs while creating the queue */ void createQueue(String address, RoutingType routingType, String queueName, String filter, boolean durable, boolean autoCreated) throws ActiveMQException; /** * Creates a <em>non-temporary</em>queue. * * @param address the queue will be bound to this address * @param routingType the delivery mode for this queue, MULTICAST or ANYCAST * @param queueName the name of the queue * @param filter only messages which match this filter will be put in the queue * @param durable whether the queue is durable or not * @param autoCreated whether to mark this queue as autoCreated or not * @param maxConsumers how many concurrent consumers will be allowed on this queue * @param purgeOnNoConsumers whether to delete the contents of the queue when the last consumer disconnects * @throws ActiveMQException */ void createQueue(String address, RoutingType routingType, String queueName, String filter, boolean durable, boolean autoCreated, int maxConsumers, boolean purgeOnNoConsumers) throws ActiveMQException; /** * Creates a <em>temporary</em> queue. * * @param address the queue will be bound to this address * @param routingType the delivery mode for this queue, MULTICAST or ANYCAST * @param queueName the name of the queue * @throws ActiveMQException in an exception occurs while creating the queue */ void createTemporaryQueue(SimpleString address, RoutingType routingType, SimpleString queueName) throws ActiveMQException; /** * Creates a <em>temporary</em> queue. * * @param address the queue will be bound to this address * @param routingType the delivery mode for this queue, MULTICAST or ANYCAST * @param queueName the name of the queue * @throws ActiveMQException in an exception occurs while creating the queue */ void createTemporaryQueue(String address, RoutingType routingType, String queueName) throws ActiveMQException; /** * Creates a <em>temporary</em> queue with a filter. * * @param address the queue will be bound to this address * @param routingType the delivery mode for this queue, MULTICAST or ANYCAST * @param queueName the name of the queue * @param filter only messages which match this filter will be put in the queue * @throws ActiveMQException in an exception occurs while creating the queue */ void createTemporaryQueue(SimpleString address, RoutingType routingType, SimpleString queueName, SimpleString filter) throws ActiveMQException; /** * Creates a <em>temporary</em> queue with a filter. * * @param address the queue will be bound to this address * @param routingType the delivery mode for this queue, MULTICAST or ANYCAST * @param queueName the name of the queue * @param filter only messages which match this filter will be put in the queue * @throws ActiveMQException in an exception occurs while creating the queue */ void createTemporaryQueue(String address, RoutingType routingType, String queueName, String filter) throws ActiveMQException; /** * Deletes the queue. * * @param queueName the name of the queue to delete * @throws ActiveMQException if there is no queue for the given name or if the queue has consumers */ void deleteQueue(SimpleString queueName) throws ActiveMQException; /** * Deletes the queue. * * @param queueName the name of the queue to delete * @throws ActiveMQException if there is no queue for the given name or if the queue has consumers */ void deleteQueue(String queueName) throws ActiveMQException; // Consumer Operations ------------------------------------------- /** * Creates a ClientConsumer to consume message from the queue with the given name. * * @param queueName name of the queue to consume messages from * @return a ClientConsumer * @throws ActiveMQException if an exception occurs while creating the ClientConsumer */ ClientConsumer createConsumer(SimpleString queueName) throws ActiveMQException; /** * Creates a ClientConsumer to consume messages from the queue with the given name. * * @param queueName name of the queue to consume messages from * @return a ClientConsumer * @throws ActiveMQException if an exception occurs while creating the ClientConsumer */ ClientConsumer createConsumer(String queueName) throws ActiveMQException; /** * Creates a ClientConsumer to consume messages matching the filter from the queue with the given name. * * @param queueName name of the queue to consume messages from * @param filter only messages which match this filter will be consumed * @return a ClientConsumer * @throws ActiveMQException if an exception occurs while creating the ClientConsumer */ ClientConsumer createConsumer(SimpleString queueName, SimpleString filter) throws ActiveMQException; /** * Creates a ClientConsumer to consume messages matching the filter from the queue with the given name. * * @param queueName name of the queue to consume messages from * @param filter only messages which match this filter will be consumed * @return a ClientConsumer * @throws ActiveMQException if an exception occurs while creating the ClientConsumer */ ClientConsumer createConsumer(String queueName, String filter) throws ActiveMQException; /** * Creates a ClientConsumer to consume or browse messages from the queue with the given name. * <p> * If <code>browseOnly</code> is <code>true</code>, the ClientConsumer will receive the messages * from the queue but they will not be consumed (the messages will remain in the queue). Note * that paged messages will not be in the queue, and will therefore not be visible if * {@code browseOnly} is {@code true}. * <p> * If <code>browseOnly</code> is <code>false</code>, the ClientConsumer will behave like consume * the messages from the queue and the messages will effectively be removed from the queue. * * @param queueName name of the queue to consume messages from * @param browseOnly whether the ClientConsumer will only browse the queue or consume messages. * @return a ClientConsumer * @throws ActiveMQException if an exception occurs while creating the ClientConsumer */ ClientConsumer createConsumer(SimpleString queueName, boolean browseOnly) throws ActiveMQException; /** * Creates a ClientConsumer to consume or browse messages from the queue with the given name. * <p> * If <code>browseOnly</code> is <code>true</code>, the ClientConsumer will receive the messages * from the queue but they will not be consumed (the messages will remain in the queue). Note * that paged messages will not be in the queue, and will therefore not be visible if * {@code browseOnly} is {@code true}. * <p> * If <code>browseOnly</code> is <code>false</code>, the ClientConsumer will behave like consume * the messages from the queue and the messages will effectively be removed from the queue. * * @param queueName name of the queue to consume messages from * @param browseOnly whether the ClientConsumer will only browse the queue or consume messages. * @return a ClientConsumer * @throws ActiveMQException if an exception occurs while creating the ClientConsumer */ ClientConsumer createConsumer(String queueName, boolean browseOnly) throws ActiveMQException; /** * Creates a ClientConsumer to consume or browse messages matching the filter from the queue with * the given name. * <p> * If <code>browseOnly</code> is <code>true</code>, the ClientConsumer will receive the messages * from the queue but they will not be consumed (the messages will remain in the queue). Note * that paged messages will not be in the queue, and will therefore not be visible if * {@code browseOnly} is {@code true}. * <p> * If <code>browseOnly</code> is <code>false</code>, the ClientConsumer will behave like consume * the messages from the queue and the messages will effectively be removed from the queue. * * @param queueName name of the queue to consume messages from * @param filter only messages which match this filter will be consumed * @param browseOnly whether the ClientConsumer will only browse the queue or consume messages. * @return a ClientConsumer * @throws ActiveMQException if an exception occurs while creating the ClientConsumer */ ClientConsumer createConsumer(String queueName, String filter, boolean browseOnly) throws ActiveMQException; /** * Creates a ClientConsumer to consume or browse messages matching the filter from the queue with * the given name. * <p> * If <code>browseOnly</code> is <code>true</code>, the ClientConsumer will receive the messages * from the queue but they will not be consumed (the messages will remain in the queue). Note * that paged messages will not be in the queue, and will therefore not be visible if * {@code browseOnly} is {@code true}. * <p> * If <code>browseOnly</code> is <code>false</code>, the ClientConsumer will behave like consume * the messages from the queue and the messages will effectively be removed from the queue. * * @param queueName name of the queue to consume messages from * @param filter only messages which match this filter will be consumed * @param browseOnly whether the ClientConsumer will only browse the queue or consume messages. * @return a ClientConsumer * @throws ActiveMQException if an exception occurs while creating the ClientConsumer */ ClientConsumer createConsumer(SimpleString queueName, SimpleString filter, boolean browseOnly) throws ActiveMQException; /** * Creates a ClientConsumer to consume or browse messages matching the filter from the queue with * the given name. * <p> * If <code>browseOnly</code> is <code>true</code>, the ClientConsumer will receive the messages * from the queue but they will not be consumed (the messages will remain in the queue). Note * that paged messages will not be in the queue, and will therefore not be visible if * {@code browseOnly} is {@code true}. * <p> * If <code>browseOnly</code> is <code>false</code>, the ClientConsumer will behave like consume * the messages from the queue and the messages will effectively be removed from the queue. * * @param queueName name of the queue to consume messages from * @param filter only messages which match this filter will be consumed * @param windowSize the consumer window size * @param maxRate the maximum rate to consume messages * @param browseOnly whether the ClientConsumer will only browse the queue or consume messages. * @return a ClientConsumer * @throws ActiveMQException if an exception occurs while creating the ClientConsumer */ ClientConsumer createConsumer(SimpleString queueName, SimpleString filter, int windowSize, int maxRate, boolean browseOnly) throws ActiveMQException; /** * Creates a ClientConsumer to consume or browse messages matching the filter from the queue with * the given name. * <p> * If <code>browseOnly</code> is <code>true</code>, the ClientConsumer will receive the messages * from the queue but they will not be consumed (the messages will remain in the queue). Note * that paged messages will not be in the queue, and will therefore not be visible if * {@code browseOnly} is {@code true}. * <p> * If <code>browseOnly</code> is <code>false</code>, the ClientConsumer will behave like consume * the messages from the queue and the messages will effectively be removed from the queue. * * @param queueName name of the queue to consume messages from * @param filter only messages which match this filter will be consumed * @param windowSize the consumer window size * @param maxRate the maximum rate to consume messages * @param browseOnly whether the ClientConsumer will only browse the queue or consume messages. * @return a ClientConsumer * @throws ActiveMQException if an exception occurs while creating the ClientConsumer */ ClientConsumer createConsumer(String queueName, String filter, int windowSize, int maxRate, boolean browseOnly) throws ActiveMQException; // Producer Operations ------------------------------------------- /** * Creates a producer with no default address. * Address must be specified every time a message is sent * * @return a ClientProducer * @see ClientProducer#send(SimpleString, org.apache.activemq.artemis.api.core.Message) */ ClientProducer createProducer() throws ActiveMQException; /** * Creates a producer which sends messages to the given address * * @param address the address to send messages to * @return a ClientProducer * @throws ActiveMQException if an exception occurs while creating the ClientProducer */ ClientProducer createProducer(SimpleString address) throws ActiveMQException; /** * Creates a producer which sends messages to the given address * * @param address the address to send messages to * @return a ClientProducer * @throws ActiveMQException if an exception occurs while creating the ClientProducer */ ClientProducer createProducer(String address) throws ActiveMQException; /** * Creates a producer which sends messages to the given address * * @param address the address to send messages to * @param rate the producer rate * @return a ClientProducer * @throws ActiveMQException if an exception occurs while creating the ClientProducer */ ClientProducer createProducer(SimpleString address, int rate) throws ActiveMQException; // Message operations -------------------------------------------- /** * Creates a ClientMessage. * * @param durable whether the created message is durable or not * @return a ClientMessage */ ClientMessage createMessage(boolean durable); /** * Creates a ClientMessage. * * @param type type of the message * @param durable whether the created message is durable or not * @return a ClientMessage */ ClientMessage createMessage(byte type, boolean durable); /** * Creates a ClientMessage. * * @param type type of the message * @param durable whether the created message is durable or not * @param expiration the message expiration * @param timestamp the message timestamp * @param priority the message priority (between 0 and 9 inclusive) * @return a ClientMessage */ ClientMessage createMessage(byte type, boolean durable, long expiration, long timestamp, byte priority); // Query operations ---------------------------------------------- /** * Queries information on a queue. * * @param queueName the name of the queue to query * @return a QueueQuery containing information on the given queue * @throws ActiveMQException if an exception occurs while querying the queue */ QueueQuery queueQuery(SimpleString queueName) throws ActiveMQException; /** * Queries information on a binding. * * @param address the address of the biding to query * @return an AddressQuery containing information on the binding attached to the given address * @throws ActiveMQException if an exception occurs while querying the binding */ AddressQuery addressQuery(SimpleString address) throws ActiveMQException; // Transaction operations ---------------------------------------- /** * Returns the XAResource associated to the session. * * @return the XAResource associated to the session */ XAResource getXAResource(); /** * Return <code>true</code> if the session supports XA, <code>false</code> else. * * @return <code>true</code> if the session supports XA, <code>false</code> else. */ boolean isXA(); /** * Commits the current transaction. * * @throws ActiveMQException if an exception occurs while committing the transaction */ void commit() throws ActiveMQException; /** * Rolls back the current transaction. * * @throws ActiveMQException if an exception occurs while rolling back the transaction */ void rollback() throws ActiveMQException; /** * Rolls back the current transaction. * * @param considerLastMessageAsDelivered the first message on deliveringMessage Buffer is considered as delivered * @throws ActiveMQException if an exception occurs while rolling back the transaction */ void rollback(boolean considerLastMessageAsDelivered) throws ActiveMQException; /** * Returns <code>true</code> if the current transaction has been flagged to rollback, <code>false</code> else. * * @return <code>true</code> if the current transaction has been flagged to rollback, <code>false</code> else. */ boolean isRollbackOnly(); /** * Returns whether the session will <em>automatically</em> commit its transaction every time a message is sent * by a ClientProducer created by this session, <code>false</code> else * * @return <code>true</code> if the session <em>automatically</em> commit its transaction every time a message is sent, <code>false</code> else */ boolean isAutoCommitSends(); /** * Returns whether the session will <em>automatically</em> commit its transaction every time a message is acknowledged * by a ClientConsumer created by this session, <code>false</code> else * * @return <code>true</code> if the session <em>automatically</em> commit its transaction every time a message is acknowledged, <code>false</code> else */ boolean isAutoCommitAcks(); /** * Returns whether the ClientConsumer created by the session will <em>block</em> when they acknowledge a message. * * @return <code>true</code> if the session's ClientConsumer block when they acknowledge a message, <code>false</code> else */ boolean isBlockOnAcknowledge(); /** * Sets a <code>SendAcknowledgementHandler</code> for this session. * * @param handler a SendAcknowledgementHandler * @return this ClientSession */ ClientSession setSendAcknowledgementHandler(SendAcknowledgementHandler handler); /** * Attach any metadata to the session. * * @throws ActiveMQException */ void addMetaData(String key, String data) throws ActiveMQException; /** * Attach any metadata to the session. Throws an exception if there's already a metadata available. * You can use this metadata to ensure that there is no other session with the same meta-data you are passing as an argument. * This is useful to simulate unique client-ids, where you may want to avoid multiple instances of your client application connected. * * @throws ActiveMQException */ void addUniqueMetaData(String key, String data) throws ActiveMQException; /** * Return the sessionFactory used to created this Session. * * @return */ ClientSessionFactory getSessionFactory(); }