发布/预订消息传递和主题空间
您可以使用发布/预订消息传递将一条消息发布至许多订户。生产应用程序对所给定的主体集区域或主题发布消息。特定消息(发布)的主题是该消息的一个属性。每个已预订该主题的用户应用程序会接收该消息的副本。主题空间是用于发布/预订主题的层次结构。这些主题对它们的相关联服务集成总线中的每个消息传递引擎自动定义了发布点。
服务集成主题空间目标不在特定总线成员中。服务集成将预订列表保留在主题空间中并针对该列表匹配每个发布。新发布与主题空间中的一个或多个预订匹配时,服务集成将该发布的副本传送至每个订户。必要时,服务集成可对发布消息进行排队直到订户准备好接收该消息。如果新发布未与任何预订匹配,那么服务集成会废弃该发布。
主题空间对层次结构中的所有主题具有一组缺省的发布/预订许可权。管理员可为各个发布/预订主题配置特定的许可权和调解。发布/预订主题从主题空间层次结构中的较高层的发布/预订主题以及主题空间本身继承这样的配置。
同名的发布/预订主题可以存在于多个主题空间中,但是在一条总线中只能有一个具有给定名称的主题空间。例如,考虑分为下列主题空间的发布/预订主题层次结构:
- library
- 有关文档管理的主题。
- 销售
- 有关市场营销和销售跟踪的主题。
生产应用程序可以连接到总线中的任何消息传递引擎。消息存储在与生产者相连的消息传递引擎的消息存储器中。因此,主题空间可以将消息存储在总线中各种(生产)消息传递引擎的许多消息存储器中。将发布/预订主题的消息发布至发布点,并自动将它们转发至有该主题订户的所有其他发布点。
图 1. 发布/预订消息传递

缺省消息传递提供程序支持对发布/预订主题使用持久预订。这使订户可以接收到发布到主题的所有消息的副本,即使这些消息是在订户与服务器断开连接的这段时间内发布的。对于给定的 JMS连接工厂或激活规范,要传递给持久预订的所有发布/预订消息存储在持久预订主属性指定的消息传递引擎的发布点上。因此,如果该消息传递引擎不可用,那么订户不能检索消息。这些未发送消息会被保留并在消息传递引擎重新启动后发送给持久预订。