3.2. 将 AMQP 与网络连接搭配使用
代理支持 AMQP 1.0 规格。AMQP 链接是源和目标(即客户端和代理)之间消息的双向协议。
步骤
-
打开配置文件
BROKER_INSTANCE_DIR/etc/broker.xml
-
添加或配置
接收器
,通过包含作为 URI 的一部分AMQP
值的 protocol 参数来接收 AMQP 客户端,如下例所示:
<acceptors> <acceptor name="amqp-acceptor">tcp://localhost:5672?protocols=AMQP</acceptor> ... </acceptors>
在前面的示例中,代理接受端口 5672 上的 AMQP 1.0 客户端,这是默认的 AMQP 端口。
AMQP 链接有两个端点,即发送者和接收器。当发件人传输消息时,代理会将其转换为内部格式,因此可以转发到代理上的目的地。接收器连接到代理的目的地,并在传递消息之前将其转换为 AMQP。
如果 AMQP 链接是动态的,则会创建一个临时队列,并且将远程源或远程目标地址设置为临时队列的名称。如果链接不是动态的,则使用远程目标或源的地址。如果远程目标或源不存在,则会发送异常。
链接目标也可以是一个协调器,用于处理底层会话作为事务,可以回滚或提交它。
AMQP 允许为每个会话使用多个事务: amqp:multi-txns-per-ssn
,但 AMQ Broker 的当前版本只支持每个会话的单个事务。
AMQP 中分布式事务(XA)的详细信息不在规范 1.0 版本中提供。如果您的环境需要支持分布式事务,建议使用 AMQ Core Protocol JMS。
有关协议及其功能的更多信息,请参阅 AMQP 1.0 规格。
3.2.1. 使用 AMQP 链接作为主题
与 JMS 不同,AMQP 协议不包括主题。但是,仍有可能将 AMQP 使用者或接收器视为订阅,而不只是队列上的使用者。默认情况下,任何与前缀 jms.topic.
附加到地址的接收链接都被视为订阅,同时创建订阅队列。根据 Terminus Durability 的配置,订阅队列的易失性或易失性是什么,如下表所示:
为仅多播队列创建这类订阅… | 将 Terminus Durability 设置为 this… |
---|---|
durable |
|
Non-durable |
|
durable queue 的名称由容器 ID 和链接名称组成,如 my-container-id:my-link-name
。
AMQ Broker 还支持 qpid-jms 客户端,无论用于地址的前缀,都将遵守其使用主题。