...
This page provides sample code showing how to integrate develop with the Grouper Messaging System with another messaging system.
GSH to manage built in messaging
GSH to send / receive messages
Integrating Grouper messaging with a new messaging system (e.g. if an AcmeMQ adapter is not implemented, this is how to implement one)
- Interface GrouperMessagingSystem defines a messaging system. Implement this to integrate Grouper messaging with a messaging system
- GrouperBuiltinMessagingSystem implements GrouperMessagingSystem - Grouper's implementation of the messaging interface
- GrouperMessagingEngine is the Grouper API to send a message to various messaging systems
...
Code Block |
---|
################################ ## Grouper Messaging System ################################ # name of messaging system which is the default grouper.messaging.default.name.of.messaging.system = grouperBuiltinMessaging # name of a messaging system. note, "grouperBuiltinMessaging" can be arbitrary grouper.messaging.system.grouperBuiltinMessaging.name = grouperBuiltinMessaging # class that implements edu.internet2.middleware.grouperClient.messaging.GrouperMessagingSystem grouper.messaging.system.grouperBuiltinMessaging.class = edu.internet2.middleware.grouper.messaging.GrouperBuiltinMessagingSystem # name of a messaging system. note, "myAwsMessagingSystem" can be arbitrary # grouper.messaging.system.myAwsMessagingSystem.name = aws # class that implements edu.internet2.middleware.grouperClient.messaging.GrouperMessagingSystem # grouper.messaging.system.myAwsMessagingSystem.class = |
Configure Builtin queues/topicsThe messaging interface is:
Code Block |
---|
// create objects
GrouperBuiltinMessagingSystem.createQueue("abc");
GrouperBuiltinMessagingSystem.createTopic("def");
// permissions on objects
GrouperBuiltinMessagingSystem.allowSendToQueue("abc", SubjectTestHelper.SUBJ0);
GrouperBuiltinMessagingSystem.allowSendToTopic("abc", SubjectTestHelper.SUBJ0);
GrouperBuiltinMessagingSystem.allowReceiveFromQueue("abc", SubjectTestHelper.SUBJ0);
//link up topic with queue(s)
GrouperBuiltinMessagingSystem.topicSendsToQueue("def", "abc"); |
Use messaging
...
**
*
* @author mchyzer
* $Id$
*/
package edu.internet2.middleware.grouperClient.messaging;
/**
* Represents the methods that a messaging system
* needs to support
*/
public interface GrouperMessagingSystem {
/**
* send a message to a queue name. Note, the recipient could be a
* queue or a topic (generally always one or the other) based on the
* implementation of the messaging system. Messages must be delievered
* in the order that collection iterator designates. If there is a problem
* delivering the messages, the implementation should log, wait (back off)
* and retry until it is successful.
* @param grouperMessageSendParam has the queue or topic, and the message(s) and perhaps args
* @return result
*/
public GrouperMessageSendResult send(GrouperMessageSendParam grouperMessageSendParam);
/**
* this will generally block until there are messages to process. These messages
* are ordered in the order that they were sent.
* @param grouperMessageReceiveParam grouper messaging receive param
* @return a message or multiple messages. It will block until there are messages
* available for this recipient to process
*/
public GrouperMessageReceiveResult receive(GrouperMessageReceiveParam grouperMessageReceiveParam);
/**
* tell the messaging system that these messages are processed
* generally the message system will use the message id. Note, the objects
* sent to this method must be the same that were received in the
* receiveMessages method. If there is a problem
* delivering the messages, the implementation should wait (back off)
* and retry until it is successful. Alternatively the message should be
* returned to queue, returned to end of queue, or sent to another queue
* @param grouperMessageAcknowledgeParam
* @return result
*/
public GrouperMessageAcknowledgeResult acknowledge(GrouperMessageAcknowledgeParam grouperMessageAcknowledgeParam);
}
|
Messaging listener
Code Block |
---|
##################################### ## Messaging listener ##################################### # note, change "messagingListener" in key to be the name of the listener. e.g. messaging.listener.myAzureListener.class # extends edu.internet2.middleware.grouper.messaging.MessagingListenerBase # this listener will just print out messages: edu.internet2.middleware.grouper.messaging.MessagingListenerPrint # #messaging.listener.messagingListener.class = edu.internet2.middleware.grouper.messaging.MessagingListener #messaging.listener.messagingListener.quartzCron = 0 * * * * ? #messaging.listener.messagingListener.messagingSystemName = grouperBuiltinMessaging #messaging.listener.messagingListener.queue = abc #messaging.listener.messagingListener.numberOfTriesPerIteration = 3 #messaging.listener.messagingListener.pollingTimeoutSeconds = 18 #messaging.listener.messagingListener.sleepSecondsInBetweenIterations = 0 #messaging.listener.messagingListener.maxMessagesToReceiveAtOnce = 20 # if there are 20 messages to receive at once, then do this 50 times per call max #messaging.listener.messagingListener.maxOuterLoops = 50 |
...