第 32 章 后向和转发兼容性

JBoss EAP 支持与将 HornetQ 用作消息传递代理(如 JBoss EAP 6)的传统 JBoss EAP 版本向后兼容。这两种兼容性模式由 JBoss EAP 内置消息传递服务器 ActiveMQ Artemis 提供,其支持 HornetQ 的核心协议。

  • 向前兼容性 :使用 HornetQ 的 Legacy Jakarta 消息传递客户端可以连接到运行 ActiveMQ Artemis 的 JBoss EAP 7 服务器。
  • 向后兼容性 :使用 JBoss EAP 消息传递的 JBoss EAP 7 Jakarta 消息传递客户端可以连接运行 HornetQ 的传统 JBoss EAP 6 服务器。

32.1. forward Compatibility

向前兼容性不需要对旧版 JBoss EAP 6 Jakarta 消息传递客户端的代码更改。JBoss EAP messaging-activemq 子系统及其资源提供支持。为了支持向前兼容性,需要对 JBoss EAP 7 服务器的配置进行以下更改:每个步骤都提供了单机服务器的管理 CLI 命令示例:

  • 创建 socket-binding,侦听远程传统客户端的端口 4447。

    /socket-binding-group=standard-sockets/socket-binding=legacy-remoting:add(port=4447)
  • 创建一个传统的 remote-connector,它将使用上一步中创建的 socket-binding。JNDI 查找需要此项。

    /subsystem=remoting/connector=legacy-remoting-connector:add(socket-binding=legacy-remoting)
  • 设置一个传统的消息传递 套接字绑定,侦听端口 5445。

    /socket-binding-group=standard-sockets/socket-binding=legacy-messaging:add(port=5445)
  • messaging -activemq 子系统中设置 remote-connector 和 remote- acceptor,该子系统使用上一步中的绑定。

    /subsystem=messaging-activemq/server=default/remote-connector=legacy-messaging-connector:add(socket-binding=legacy-messaging)
    
    /subsystem=messaging-activemq/server=default/remote-acceptor=legacy-messaging-acceptor:add(socket-binding=legacy-messaging)
  • 在 messaging- activemq 子系统的 legacy-connection-factory 元素中创建传统的 HornetQ Jakarta Messaging ConnectionFactory。

    /subsystem=messaging-activemq/server=default/legacy-connection-factory=legacy-discovery:add(entries=[java:jboss/exported/jms/LegacyRemoteConnectionFactory], connectors=[legacy-messaging-connector])
  • 创建传统的 HornetQ Jakarta 消息目的地,并将 legacy-entries 属性包含在 jms-queuejms-topic 资源。

    jms-queue add --queue-address=myQueue --entries=[java:jboss/exported/jms/myQueue-new] --legacy-entries=[java:jboss/exported/jms/myQueue]
    
    jms-topic add --topic-address=myTopic --entries=[java:jboss/exported/jms/myTopic-new] --legacy-entries=[java:jboss/exported/jms/myTopic]

    您可以按照以下示例所示,在现有队列或主题中添加 legacy-entries

    /subsystem=messaging-activemq/server=default/jms-queue=myQueue:write-attribute(name=legacy-entries,value=[java:jboss/exported/jms/myQueue])

    虽然这些 条目 属性由 JBoss EAP 消息 Jakarta 消息传递客户端使用,但 legacy-entries 供旧版 HornetQ Jakarta 消息传递客户端使用。旧版 Jakarta 消息传递客户端查找此传统的 Jakarta 消息传递资源,以便与 JBoss EAP 7 通信。

    注意

    为避免旧版 Jakarta 消息传递客户端中任何代码更改,messaging-activemq 子系统中配置的旧 JNDI 条目必须与传统的 Jakarta 消息传递客户端预期的查找相匹配。

管理 CLI 迁移操作

当您运行管理 CLI 迁移 操作以更新 消息传递 子系统配置时,如果布尔值参数 add-legacy-entries 设为 true,delay -activemq 子系统会创建 legacy-connection-factory 资源,并将 legacy-entries 添加到 jms-queuejms-topic 资源。迁移的 messaging-activemq 子系统中的传统条目将与传统 消息传递 子系统中指定的条目对应,而常规条目则使用 -new 后缀创建。

如果在运行 迁移 操作时将布尔值参数 add-legacy-entries 设置为 false,则 messaging-activemq 子系统中不会创建传统资源,并且传统的 Jakarta 消息传递客户端将无法与 JBoss EAP 7 服务器通信。