Create a Completion Listener for Asynchronous Sending
TIBCO Enterprise Message Service provides APIs for a Message Producer to send messages either synchronously or asynchronously. For asynchronous sending, you need to implement a
CompletionListener
that serves as an asynchronous event handler for message send result notification.
A completion listener implementation has two methods: onCompletion() is invoked after a message has successfully been sent, and onException() is invoked if the send failed. These methods are invoked in a different thread from that in which the message was sent. You implement the methods to perform the desired actions when the application is notified of send success or failure. Your implementation should handle all exceptions, and it should not throw any exceptions.
Once you create a completion listener, you pass it as an argument into the
MessageProducer
send method, or into the JMSProducer
setAsync() method. If passed into the JMSProducer
setAsync
method, the JMSProducer will always send asynchronously.
- Java
Create an implementation of the CompletionListener interface, create a CompletionListener and pass that into the appropriate send method:
/* create connection, session, producer, message */
TibjmsCompletionListener completionListener = new
TibjmsCompletionListener();
msgProducer.send(destination, msg, completionListener);
Create a CompletionListener class and Implement the
onCompletion()
andonException()
method to perform the desired actions when a message arrives:class TibjmsCompletionListener implements CompletionListener
{
public void onCompletion(Message msg)
{
/* Handle the send success case for the message */}
public void onException(Message msg, Exception ex)
{
/* Handle the send failure case for the message */
}
}See the
tibjmsMsgProducer.java
sample client for a working example. - C
In C, Implement an
onCompletion()
function to perform the desired actions when a message is sent:static void onCompletion(tibemsMsg msg, tibems_status status, void* closure) { if (status == TIBEMS_OK) { /* Handle the send success case for the message */ } else { /* Handle the send failure case for the message */ } } /* Create a connection, session, and producer. When sending, pass * the onCompletion() function as the tibemsMsgCompletionCallback */ status = tibemsMsgProducer_AsyncSend(producer, msg, onCompletion, NULL);
See the
tibemsMsgProducer.c
sample client for a working example. - C#
Create an implementation of the
ICompletionListener
interface, create aCompletionListener
and pass that into the appropriate send method.EMSCompletionListener completionListener = new EMSCompletionListener();
producer.Send(destination, msg, completionListener);
Create an implementation of the
IMessageListener
interface to perform actions when a message is sent:class EMSCompletionListener : ICompletionListener
{
public void OnCompletion(Message msg)
{
/* Handle the send success case for the message */
}
public void OnException(Message msg, Exception ex)
{
/* Handle the send failure case for the message */
}
}
See the
csMsgProducer.cs
sample client for a working example.