/*
*
* 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.
*
*/
using System;
namespace Apache.Qpid.Messaging
{
public delegate void MessageReceivedDelegate(IMessage msg);
///
/// Interface used to manipulate an AMQP channel.
///
///
/// You can create a channel by using the CreateChannel() method
/// of the connection object.
///
public interface IChannel : IDisposable
{
///
/// Acknowledge mode for messages received
///
AcknowledgeMode AcknowledgeMode { get; }
///
/// True if the channel should use transactions
///
bool Transacted { get; }
///
/// Prefetch value to be used as the default for
/// consumers created on this channel.
///
int DefaultPrefetch { get; }
///
/// Prefetch low value to be used as the default for
/// consumers created on this channel.
///
int DefaultPrefetchLow { get; }
///
/// Prefetch high value to be used as the default for
/// consumers created on this channel.
///
int DefaultPrefetchHigh { get; }
///
/// Declare a new exchange
///
/// Name of the exchange
/// Class of the exchange, from
void DeclareExchange(string exchangeName, string exchangeClass);
///
/// Declare a new exchange using the default exchange class
///
/// Name of the exchange
void DeleteExchange(string exchangeName);
///
/// Declare a new queue with the specified set of arguments
///
/// Name of the queue
/// True if the queue should be durable
/// True if the queue should be exclusive to this channel
/// True if the queue should be deleted when the channel closes
void DeclareQueue(string queueName, bool isDurable, bool isExclusive, bool isAutoDelete);
///
/// Delete a queue with the specifies arguments
///
/// Name of the queue to delete
/// If true, the queue will not deleted if it has no consumers
/// If true, the queue will not deleted if it has no messages
/// If true, the server will not respond to the method
void DeleteQueue(string queueName, bool ifUnused, bool ifEmpty, bool noWait);
///
/// Generate a new Unique name to use for a queue
///
/// A unique name to this channel
string GenerateUniqueName();
///
/// Removes all messages from a queue
///
/// Name of the queue to delete
/// If true, the server will not respond to the method
void PurgeQueue(string queueName, bool noWait);
///
/// Bind a queue to the specified exchange
///
/// Name of queue to bind
/// Name of exchange to bind to
/// Routing key
void Bind(string queueName, string exchangeName, string routingKey);
///
/// Bind a queue to the specified exchange
///
/// Name of queue to bind
/// Name of exchange to bind to
/// Routing key
/// Table of arguments for the binding. Used to bind with a Headers Exchange
void Bind(string queueName, string exchangeName, string routingKey, IFieldTable args);
///
/// Create a new empty message with no body
///
/// The new message
IMessage CreateMessage();
///
/// Create a new message of the specified MIME type
///
/// The mime type to create
/// The new message
IMessage CreateMessage(string mimeType);
///
/// Creates a new message for bytes (application/octet-stream)
///
/// The new message
IBytesMessage CreateBytesMessage();
///
/// Creates a new text message (text/plain) with empty content
///
/// The new message
ITextMessage CreateTextMessage();
///
/// Creates a new text message (text/plain) with a body
///
/// Initial body of the message
/// The new message
ITextMessage CreateTextMessage(string initialValue);
#region Consuming
///
/// Creates a new Consumer using the builder pattern
///
/// Name of queue to receive messages from
/// The builder object
MessageConsumerBuilder CreateConsumerBuilder(string queueName);
///
/// Creates a new consumer
///
/// Name of queue to receive messages from
/// Low prefetch value
/// High prefetch value
/// If true, messages sent on this channel will not be received by this consumer
/// If true, the consumer opens the queue in exclusive mode
/// If true, create a durable subscription
/// Subscription name
/// The new consumer
IMessageConsumer CreateConsumer(string queueName,
int prefetchLow,
int prefetchHigh,
bool noLocal,
bool exclusive,
bool durable,
string subscriptionName);
///
/// Unsubscribe from a queue
///
/// Subscription name
void Unsubscribe(string subscriptionName);
#endregion
#region Publishing
///
/// Create a new message publisher using the builder pattern
///
/// The builder object
MessagePublisherBuilder CreatePublisherBuilder();
///
/// Create a new message publisher
///
/// Name of exchange to publish to
/// Routing key
/// Default delivery mode
/// Default TTL time of messages
/// If true, sent immediately
/// If true, the broker will return an error
/// (as a connection exception) if the message cannot be delivered
/// Default message priority
/// The new message publisher
IMessagePublisher CreatePublisher(string exchangeName,
string routingKey,
DeliveryMode deliveryMode,
long timeToLive,
bool immediate,
bool mandatory,
int priority);
#endregion
#region Transactions
///
/// Recover after transaction failure
///
void Recover();
///
/// Commit the transaction
///
void Commit();
///
/// Rollback the transaction
///
void Rollback();
#endregion
}
}