/*
* 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.NMS
{
///
/// A delegate that a client can register that will be called each time a Producer's send method is
/// called to allow the client to Transform a sent message from one type to another, StreamMessage to
/// TextMessage, ObjectMessage to TextMessage containing XML, etc. This allows a client to create a
/// producer that will automatically transform a message to a type that some receiving client is
/// capable of processing or adding additional information to a sent message such as additional message
/// headers, etc. For messages that do not need to be processed the client should return null from
/// this method, in this case the original message will be sent.
///
public delegate IMessage ProducerTransformerDelegate(ISession session, IMessageProducer producer, IMessage message);
///
/// An object capable of sending messages to some destination
///
public interface IMessageProducer : System.IDisposable
{
///
/// Sends the message to the default destination for this producer
///
void Send(IMessage message);
///
/// Sends the message to the default destination with the explicit QoS configuration
///
void Send(IMessage message, MsgDeliveryMode deliveryMode, MsgPriority priority, TimeSpan timeToLive);
///
/// Sends the message to the given destination
///
void Send(IDestination destination, IMessage message);
///
/// Sends the message to the given destination with the explicit QoS configuration
///
void Send(IDestination destination, IMessage message, MsgDeliveryMode deliveryMode, MsgPriority priority, TimeSpan timeToLive);
///
/// Close the producer.
///
void Close();
///
/// A delegate that is called each time a Message is sent from this Producer which allows
/// the application to perform any needed transformations on the Message before it is sent.
///
ProducerTransformerDelegate ProducerTransformer { get; set; }
MsgDeliveryMode DeliveryMode { get; set; }
TimeSpan TimeToLive { get; set; }
TimeSpan RequestTimeout { get; set; }
MsgPriority Priority { get; set; }
bool DisableMessageID { get; set; }
bool DisableMessageTimestamp { get; set; }
#region Factory methods to create messages
///
/// Creates a new message with an empty body
///
IMessage CreateMessage();
///
/// Creates a new text message with an empty body
///
ITextMessage CreateTextMessage();
///
/// Creates a new text message with the given body
///
ITextMessage CreateTextMessage(string text);
///
/// Creates a new Map message which contains primitive key and value pairs
///
IMapMessage CreateMapMessage();
///
/// Creates a new Object message containing the given .NET object as the body
///
IObjectMessage CreateObjectMessage(object body);
///
/// Creates a new binary message
///
IBytesMessage CreateBytesMessage();
///
/// Creates a new binary message with the given body
///
IBytesMessage CreateBytesMessage(byte[] body);
///
/// Creates a new stream message
///
IStreamMessage CreateStreamMessage();
#endregion
}
}