blob: 28188e075d064a796a956c42d0dc6b45024bbd3f [file] [log] [blame]
package org.apache.helix;
/*
* 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.
*/
import java.util.List;
import java.util.Map;
import org.apache.helix.messaging.AsyncCallback;
import org.apache.helix.messaging.handling.MessageHandlerFactory;
import org.apache.helix.model.Message;
/**
* Provides the ability to <br>
* <li>Send message to a specific component in the cluster[ participant, controller,
* Spectator(probably not needed) ]</li> <li>Broadcast message to all participants</li> <li>Send
* message to instances that hold a specific resource</li> <li>Asynchronous request response api.
* Send message with a co-relation id and invoke a method when there is a response. Can support
* timeout.</li>
*/
public interface ClusterMessagingService {
/**
* Send message matching the specifications mentioned in recipientCriteria.
* @param recipientCriteria criteria to be met, defined as {@link Criteria}
* @See Criteria
* @param message
* message to be sent. Some attributes of this message will be
* changed as required
* @return the number of messages that were successfully sent.
*/
int send(Criteria recipientCriteria, Message message);
/**
* This will send the message to all instances matching the criteria<br>
* When there is a reply to the message sent AsyncCallback.onReply will be
* invoked. Application can specify a timeout on AsyncCallback. After every
* reply is processed AsyncCallback.isDone will be invoked.<br>
* This method will return after sending the messages. <br>
* This is useful when message need to be sent and current thread need not
* wait for response since processing will be done in another thread.
* @see #send(Criteria, Message)
* @param recipientCriteria
* @param message
* @param callbackOnReply callback to trigger on completion
* @param timeOut Time to wait before failing the send
* @return the number of messages that were successfully sent
*/
int send(Criteria recipientCriteria, Message message, AsyncCallback callbackOnReply, int timeOut);
/**
* @see #send(Criteria, Message, AsyncCallback, int)
* @param recipientCriteria
* @param message
* @param callbackOnReply
* @param timeOut
* @param retryCount maximum number of times to retry the send
* @return the number of messages that were successfully sent
*/
int send(Criteria recipientCriteria, Message message, AsyncCallback callbackOnReply,
int timeOut, int retryCount);
/**
* This will send the message to all instances matching the criteria<br>
* When there is a reply to the message sent AsynCallback.onReply will be
* invoked. Application can specify a timeout on AsyncCallback. After every
* reply is processed AsyncCallback.isDone will be invoked.<br>
* This method will return only after the AsyncCallback.isDone() returns true <br>
* This is useful when message need to be sent and current thread has to wait
* for response. <br>
* The current thread can use callbackOnReply instance to store application
* specific data.
* @see #send(Criteria, Message, AsyncCallback, int)
* @param recipientCriteria
* @param message
* @param callbackOnReply
* @param timeOut
* @return the number of messages that were successfully sent
*/
int sendAndWait(Criteria recipientCriteria, Message message, AsyncCallback callbackOnReply,
int timeOut);
/**
* @see #send(Criteria, Message, AsyncCallback, int, int)
* @param receipientCriteria
* @param message
* @param callbackOnReply
* @param timeOut
* @param retryCount
* @return the number of messages that were successfully sent
*/
int sendAndWait(Criteria receipientCriteria, Message message, AsyncCallback callbackOnReply,
int timeOut, int retryCount);
/**
* This will register a message handler factory to create handlers for
* message. In case client code defines its own message type, it can define a
* message handler factory to create handlers to process those messages.
* Messages are processed in a threadpool which is hosted by cluster manager,
* and cluster manager will call the factory to create handler, and the
* handler is called in the threadpool.
* Note that only one message handler factory can be registered with one
* message type.
* @param type
* The message type that the factory will create handler for
* @param factory
* The per-type message factory
*/
public void registerMessageHandlerFactory(String type, MessageHandlerFactory factory);
/**
* This will register a message handler factory to create handlers for
* message. In case client code defines its own message type, it can define a
* message handler factory to create handlers to process those messages.
* Messages are processed in a threadpool which is hosted by cluster manager,
* and cluster manager will call the factory to create handler, and the
* handler is called in the threadpool.
* Note that only one message handler factory can be registered with one
* message type.
* @param types
* The different message types that the factory will create handler for
* @param factory
* The per-type message factory
*/
public void registerMessageHandlerFactory(List<String> types, MessageHandlerFactory factory);
/**
* This will generate all messages to be sent given the recipientCriteria and MessageTemplate,
* the messages are not sent.
* @param recipientCriteria criteria to be met, defined as {@link Criteria}
* @param messageTemplate the Message on which to base the messages to send
* @return messages to be sent, grouped by the type of instance to send the message to
*/
public Map<InstanceType, List<Message>> generateMessage(final Criteria recipientCriteria,
final Message messageTemplate);
}