通知社区模块插件文档

通知社区模块是一个可插拔的系统,用于监听、汇总和通知由地理服务器数据触发的事件,并将配置操作以某种商定的格式发送给某个外部源。

感兴趣的事件有:

  1. 目录配置更改 (插入/更新/删除图层、样式、工作空间、存储、组等)

  2. Data changes via WFS-T (任何可能影响数据精确边界框的内容)

系统在通知目的地方面是完全可插拔的,潜在的目标可以是直接对外部系统的HTTP调用、消息队列、日志文件、电子邮件。根据目标和预期用途,消息格式也可能有所不同,无论是在内容方面,例如,它可能包含详细信息,或者只是指示更改内容,以及编码,例如XML、JSON、文本、HTML。

总体架构

总体架构如下图所示:

../../_images/architecture.png

系统基本上会生成一组事件,并具有与发送消息所需工具(处理器)相匹配的配置。发送者可以被认为是生成消息有效负载的“编码器”和“发送者”的组合。

每个消息都与其处理器组合并发送到一个目标队列,在该队列中,线程池选择事件并运行其处理器。对于某些类型的事件(如目录事件),线程池只能配置一个线程,以确保事件以正确的顺序发送到目标。

安装延长件

  1. 从每晚的geoserver社区模块构建中下载通知扩展。

  2. 从每晚的geoserver社区模块构建中下载通知公共扩展。

  3. (可选)如果要使用为geonode提供的发送方/编码器,请从每晚的geoserver社区模块构建中下载通知geonode扩展。

  4. 把罐子放进 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/DNS

  • port :建立基础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的类