通知社区模块插件文档¶
通知社区模块是一个可插拔的系统,用于监听、汇总和通知由地理服务器数据触发的事件,并将配置操作以某种商定的格式发送给某个外部源。
感兴趣的事件有:
目录配置更改 (插入/更新/删除图层、样式、工作空间、存储、组等)
Data changes via WFS-T (任何可能影响数据精确边界框的内容)
系统在通知目的地方面是完全可插拔的,潜在的目标可以是直接对外部系统的HTTP调用、消息队列、日志文件、电子邮件。根据目标和预期用途,消息格式也可能有所不同,无论是在内容方面,例如,它可能包含详细信息,或者只是指示更改内容,以及编码,例如XML、JSON、文本、HTML。
总体架构¶
总体架构如下图所示:

系统基本上会生成一组事件,并具有与发送消息所需工具(处理器)相匹配的配置。发送者可以被认为是生成消息有效负载的“编码器”和“发送者”的组合。
每个消息都与其处理器组合并发送到一个目标队列,在该队列中,线程池选择事件并运行其处理器。对于某些类型的事件(如目录事件),线程池只能配置一个线程,以确保事件以正确的顺序发送到目标。
安装延长件¶
从每晚的geoserver社区模块构建中下载通知扩展。
从每晚的geoserver社区模块构建中下载通知公共扩展。
(可选)如果要使用为geonode提供的发送方/编码器,请从每晚的geoserver社区模块构建中下载通知geonode扩展。
把罐子放进
WEB-INF/lib
地理服务器安装目录。
使用¶
扩展的使用基于定义其行为和逻辑的两个组件:
名为通知程序.xml必须存在于Geoserver根数据目录的“notifier”子文件夹中(如果找不到扩展名
notifier.xml
notifier文件夹下的文件将创建一个具有默认值的新文件)实现发送方/编码器特定逻辑的JAR。
配置文件¶
配置文件将由XStream框架解析,以实例化正确的类。notifier.xml的示例包含以下内容:
<notificationConfiguration> <queueSize>1000</queueSize> <notificator> <messageFilter>type='Catalog'</messageFilter> <queueSize>1000</queueSize> <processorThreads>1</processorThreads> <genericProcessor> <geonodeEncoder /> <fanoutSender> <username>guest</username> <password>guest</password> <host>localhost</host> <port>4432</port> <virtualHost></virtualHost> <exchangeName>testExchange</exchangeName> <routingKey>testRouting</routingKey> </fanoutSender> </genericProcessor> </notificator> <notificator> ... </notificator> </notificationConfiguration>
通知配置 > 队列大小 =存储所有通知消息的队列大小。
通知配置 > 通知员 =可以有一个或多个通知者。
通知配置 > 通知员 > 消息筛选器 =是CQL筛选器,只有满足此筛选器的通知消息才会由此通知者处理。可能值为:
type='Catalog'
type='Data'
通知配置 > 通知员 > 队列大小 =存储特定通知者的通知消息的队列大小,仅满足在上指定的CQL筛选器的通知 <messageFilter>
元素将被推入此队列。
通知配置 > 通知员 > 处理或读取 =将要编码和发送通知消息的线程数。注意,对于 'Catalog'
输入event,必须将其值设为1,以确保事件以正确的顺序发送到目的地。
通知配置 > 通知员 > 通用处理器 =编码器和发送器组件的配置
通知配置 > 通知员 > 地理编码器 =这是一个占位符标记,必须与用于映射编码器实现类的别名匹配。基于自定义实现,可以提供其他属性或子标记。
备注
强制要求编码器的一个且只有一个实现与每个别名匹配。
通知配置 > 通知员 > 风机出口装置 =这是一个占位符标记,必须与用于映射sender的实现类的别名匹配。基于自定义实现,可以提供其他属性或子标记。
备注
发送方的一个且只有一个实现与每个别名匹配是必需的。
对于 AMQP扇出(RabbitMQ) 基于发送方实现,附加参数为:
host
:建立基础TCP连接的IP/DNSport
:建立基础TCP连接的端口号virtualhost
(可选):用作命名空间的路径username
(可选):如果存在用于SASL交换password
(可选):如果存在用于SASL交换exchangeName
:要将邮件发布到的exchange的名称routingKey
:标识要将消息发布到的队列(扇出类型忽略)
发送器和编码器实现¶
此插件允许发送方/编码器实现的可插入性,允许多个实现插件。
核心通知扩展将解析接口的实现:
org.geoserver.notification.common.NotificationEncoder
org.geoserver.notification.common.NotificationProcessor
org.geoserver.notification.common.NotificationXStreamInitializer
基于配置文件上标记名之间的匹配 (notifier.xml
)别名定义在 NotificationXStreamInitializer ,通知核心将使用正确的实现 NotificationEncoder / NotificationProcessor .
通知geonode扩展提供了此实现的一个示例。
这种插件的最小依赖项是(请参见 pom.xml
属于 通知Geonode 扩展名):
gs-notification-common
gs-main
插件必须扩展/实现几乎三个类/接口:
NotificationXStreamDefaultInitializer :是 NotificationXStreamInitializer 定义 NotificationEncoder / NotificationProcessor 和配置别名:
getEncoderName
:此方法必须返回编码器的别名getSenderName
:此方法必须返回发件人的别名getEncoderClass
:此方法必须返回编码器的类getSenderClass
:此方法必须返回sender的类