Grouper messaging system
The recommended approach for messaging in Grouper v2.6+ is:
Use a provisioner instead of messaging so that full and incremental syncs can occur and all the provisioning framework features can be used
If you still want to use messaging, consider using a messaging provisioner (such as Amazon AWS SNS/SQS, ActiveMQ, RabbitMQ) instead of the messaging change log. There is more granular control of which objects are eligible for the messaging, and information is kept/displayed about when messages are sent
If you still want to use the messaging change log consumer, it is still supported
Overview
The Grouper messaging system is a Java implementation of the GrouperMessagingSystem interface. It allows messages to be sent to and received from a messaging system.
The built-in implementation is:
Newer options (v2.5+) that leverage external messaging systems are:
Messages must:
support 100kB in size
support ordered messaging (unless ordered messaging consumers are not used)
support bulk methods, but the implementation can process them one at a time (if there is an error, block until all are successful)
Subpages
- Grouper messaging built in
- Grouper messaging send receive change log adapter example
- Grouper messaging send receive example
- Grouper Messaging System - full sync messages
- Grouper Messaging System development guide
- Grouper messaging to web service API
- Grouper Messaging with ActiveMQ
- Grouper Messaging with AWS SQS
- Grouper Messaging with RabbitMQ
ESB change log consumer configuration
Configure an ESB change log consumer in grouper-loader.properties:
#####################################
## Messaging integration with ESB, send change log entries to a messaging system
#####################################
# note, change "messagingEsb" in key to be the name of the consumer. e.g. changeLog.consumer.myAzureConsumer.class
# note, routingKey property is valid only for rabbitmq. For other messaging systems, it is ignored.
#changeLog.consumer.messagingEsb.class = edu.internet2.middleware.grouper.changeLog.esb.consumer.EsbConsumer
# quartz cron
#changeLog.consumer.messagingEsb.quartzCron = 0 * * * * ?
# el filter
#changeLog.consumer.messagingEsb.elfilter = event.eventType eq 'GROUP_DELETE' || event.eventType eq 'GROUP_ADD' || event.eventType eq 'MEMBERSHIP_DELETE' || event.eventType eq 'MEMBERSHIP_ADD'
# publishing class
#changeLog.consumer.messagingEsb.publisher.class = edu.internet2.middleware.grouper.changeLog.esb.consumer.EsbMessagingPublisher
# messaging system name
#changeLog.consumer.messagingEsb.publisher.messagingSystemName = grouperBuiltinMessaging
# routing key
#changeLog.consumer.messagingEsb.publisher.routingKey =
# EL replacement definition. groupName is the variable for the name of the group. grouperUtil is the class GrouperUtil can be used for utility methods.
#changeLog.consumer.messagingEsb.regexRoutingKeyReplacementDefinition = ${groupName.replaceFirst('hawaii.edu', 'group.modify').replace(':enrolled', '').replace(':waitlisted', '').replace(':withdrawn', '')}
# replace routing key with periods
#changeLog.consumer.messagingEsb.replaceRoutingKeyColonsWithPeriods = true
# queue or topic
#changeLog.consumer.messagingEsb.publisher.messageQueueType = queue
# queue or topic name
#changeLog.consumer.messagingEsb.publisher.queueOrTopicName = abc
# exchange type for rabbitmq. valid options are DIRECT, TOPIC, HEADERS, FANOUT
#changeLog.consumer.messagingEsb.publisher.exchangeType =
# key for optional extra arguments for rabbitmq. For each key, set up a corresponding value having the same index
#changeLog.consumer.messagingEsb.publisher.queueArgs.0.key = x-queue-type
# value for optional extra arguments for rabbitmq. Each index should have a corresponding key
#changeLog.consumer.messagingEsb.publisher.queueArgs.0.value = quorum
# if you want to bump up the number of change log entries for a particular consumer, you can enter that here, per change log consumer
# defaults to grouper-loader.properties changeLog.changeLogConsumerBatchSize which defaults to 1000
#changeLog.consumer.messagingEsb.changeLogConsumerBatchSize =
Java interfaces
The GrouperMessagingSystem interface is located in the GrouperClient (package edu.internet2.middleware.grouperClient.messaging):
The GrouperMessage interface (also in the GrouperClient) has a default implementation that can be used. The message contents are encrypted and carry metadata.