AMQP

ActiveMQ Classic 支持 AMQP 1.0 协议,该协议是 OASIS 标准。

可用性

从 ActiveMQ Classic 版本 5.8 开始提供。

启用 ActiveMQ Classic Broker 的 AMQP

要在代理上启用 AMQP 协议支持,请添加以下传输连接器配置,并在其 URI 中引用 amqp 方案

<transportConnectors>
   <transportConnector name="amqp" uri="amqp://0.0.0.0:5672"/>
</transportConnectors>

它在默认的 ActiveMQ Classic 服务器配置中已启用。如需更多帮助,请参见 运行代理

安全

AMQP 实现完全支持 ActiveMQ Classic 安全性 机制。这允许代理接受纯 SASL 身份验证。当访问 (读/写) 目标时,将应用授权策略。

SSL

为了额外的安全性,可以将 AMQP 配置为在 SSL 上运行,如下一节所述。

启用 NIO 上的 AMQP

为了获得更好的可扩展性 (和性能),AMQP 协议应配置为使用 NIO,而不是默认的 TCP。要使用 NIO,请使用传输方案 amqp+nio 而不是 amqp

示例

<transportConnector name="amqp+nio" uri="amqp+nio://127.0.0.1:5672"/>

此传输使用 NIO 传输,通常比标准连接器使用更少的线程。如果您想使用 大量队列,此连接器可以提供帮助。

启用 SSL 上的 AMQP

将 ActiveMQ Classic 配置为使用 SSL 连接上的 AMQP 很容易。要使用 SSL,请使用传输方案 amqp+ssl 而不是 amqp

示例

<transportConnector name="amqp+ssl" uri="amqp+ssl://127.0.0.1:5671"/>

有关在 ActiveMQ Classic 中使用 SSL 的更多详细信息,请参阅以下文章 (如何使用 SSL)。

使用 AMQP 处理目标

您应该在目标地址前添加 queue:// 以使用基于队列的目标,或添加 topic:// 以使用基于主题的目标。如果省略目标前缀,则目标类型默认为队列。

预取大小和信用

当 AMQP 接收器连接到代理时,它将映射到 JMS 消费者。此 JMS 消费者必须具有适当的 预取大小 设置。代理将遵守客户端设置的信用,或者如果客户端未设置信用,则使用默认值 1000

示例:调整默认的 prefetch 大小

<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600&amp;transport.prefetch=10"/>

在这种情况下,客户端首选项将被忽略,并将使用配置的值。

您还可以调整代理端的 amqp 接收器链接,该链接处理传入消息。它默认使用 1000 条消息的信用,但您可以使用 producerCredit 属性覆盖它,例如

<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600&amp;transport.producerCredit=10000"/>

映射到 JMS

有三种基本转换策略可用于 AMQP 并与 JMS API 交互操作。

策略 描述
native (默认) 将 AMQP 消息的字节包装到 JMS BytesMessage 中,并将 AMQP 消息的标头映射到 JMS 消息上的标头。
raw 将 AMQP 消息的字节包装到 JMS BytesMessage 中。
jms 将 AMQP 消息的标头映射到 JMS 消息标头,并将 AMQP 消息的主体映射到 JMS 主体。

transportConnector 上设置 transformer 传输选项以获得所需的映射策略。例如,要在有效负载级别与 JMS 交互操作,请将 transformer 选项设置为 jms

<transportConnector name="amqp" uri="amqp://127.0.0.1:5672?transport.transformer=jms"/>

AMQP 消息标头如何映射到 JMS 标头

以下标头将映射,而与使用的转换器无关

AMQP 消息 JMS 消息 备注
  JMS_AMQP_NATIVE 如果转换器是 nativeraw,则设置为 true,否则设置为 false
message-format JMS_AMQP_MESSAGE_FORMAT  

当转换器是 nativejms 时,以下标头映射适用

AMQP 消息 JMS 消息 备注
application-properties.JMSXGroupID JMSXGroupID  
application-properties.JMSXGroupSequence JMSXGroupSequence  
application-properties.JMSXUserID JMSXUserID  
application-properties.**name name  
delivery-annotations.**name JMS_AMQP_DA_**name  
footer.**name JMS_AMQP_FT_**name  
header.deliveryCount JMSXDeliveryCount  
header.durable JMSDeliveryMode 如果没有设置,则为 javax.jms.Message.DEFAULT_DELIVERY_MODE
header.first-acquirer JMS_AMQP_FirstAcquirer  
header.priority JMSPriority 如果没有设置,则为 javax.jms.Message.DEFAULT_PRIORITY
header.ttl JMSExpiration 如果没有设置,则为 javax.jms.Message.DEFAULT_TIME_TO_LIVE
message-annotations.**name JMS_AMQP_MA_**name  
message-annotations.x-opt-jms-type JMSType  
message-annotations.x-opt-reply-type 的类型 JMSReplyTo 逗号分隔的 queuetopictemporary 列表。如果没有设置,则默认为 queue
message-annotations.x-opt-to-type 的类型 JMSDestination 逗号分隔的 queuetopictemporary 列表。如果没有设置,则默认为 queue
properties.content-encoding JMS_AMQP_ContentEncoding  
properties.content-type JMS_AMQP_ContentType  
properties.correlation-id JMSCorrelationID  
properties.creation-time JMSTimestamp  
properties.group-sequence JMSXGroupSequence  
properties.message-id JMSMessageID 如果没有设置,则自动生成。
properties.reply-to JMSReplyTo 的名称 JMSReplyTo
properties.reply-to-group-id JMS_AMQP_ReplyToGroupID  
properties.subject JMS_AMQP_Subject  
properties.to JMSDestination 的名称 JMSDestination
properties.user-id JMSXUserID properties.user-id 被解码为 UTF-8 字符串。

AMQP 属性值类型将按如下方式转换

AMQP 类型 Java 类型 备注
binary String 二进制值的十六进制编码
bool Boolean  
byte Byte  
double Double  
float Float  
int Integer  
long Long  
short Short  
symbol String  
ubyte ByteShort 如果:value > Byte.MAX_VALUE,则使用 Short
uint IntegerLong 如果:value > Integer.MAX_VALUE,则使用 Long
ulong Long  
ushort ShortInteger 如果:value > Short.MAX_VALUE,则使用 Integer

AMQP 消息主体如何映射到 JMS 消息

如果将转换器设置为 jms,则 JMS 消息类型将取决于 AMQP 消息的主体类型。

主体类型 JMS 消息类型
AmqpSequence StreamMessage
AmqpValue ObjectMessage
AmqpValue 持有 null Message
AmqpValue 持有 String TextMessage
AmqpValue 持有 binary BytesMessage
AmqpValue 持有 list StreamMessage
Data BytesMessage
null Message

AMQP 1.0 客户端库

您可以使用 Apache Qpid Proton

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛标志和 Apache ActiveMQ 项目标志是 Apache 软件基金会的商标。版权所有 © 2024,Apache 软件基金会。根据 Apache 许可证 2.0 许可。