(3)Artemis寻址模型

概述     Artemis使用独特、灵活的寻址模型,其包括三个主要概念:地址,队列和路由类型。    地址:地址代表了一个消息的端点,通过配置地址有全局唯一的名称,一个地址可以绑定0到多个队列,并且绑定一个路由类型。    队列:当消息匹配到对应地址,取决于配置的路由类型消息会被发往一个或者多个队列。队列可以配置为自动创建和删除。    路由类型:路由类型决定如何将消息发送到与地...
摘要由CSDN通过智能技术生成

概述 

    Artemis使用独特、灵活的寻址模型,其包括三个主要概念:地址,队列和路由类型。

    地址:地址代表了一个消息的端点,通过配置地址有全局唯一的名称,一个地址可以绑定0到多个队列,并且绑定一个路由类型。

    队列:当消息匹配到对应地址,取决于配置的路由类型消息会被发往一个或者多个队列。队列可以配置为自动创建和删除。

    路由类型:路由类型决定如何将消息发送到与地址关联的队列。Artemis可以使用两种不同的路由类型进行配置:

  •     Anycast(任播):以点对点的方式匹配地址中的单个队列。
  •     Multicast(广播):以发布-订阅方式匹配地址中的每个队列。

    注意:可以为每个地址定义多个路由类型,但是会导致反模式,不建议这样做。如果地址绑定了两种路由类型,并且客户端未指定哪种路由,则代理默认使用任播路由类型。

    当客户端使用MQTT协议时,默认路由为多播。

点对点消息

    点对点消息指的是生产者发送的消息只有一个消费者(可以进行共享消费),如果多个消费者连接到同一队列,则消息在每个消费者直接平均分配。

 

    可以在$broker-instance/etc/broker.xml里配置地址和其绑定的队列。

    注意:对应普通的点对点消息,队列名称必须匹配地址名称:

<addresses>
   <address name="orders">
      <anycast>
         <queue name="orders"/>
      </anycast>
   </address>
</addresses>

    在anycast(任播)模式下,一个地址上可以定义多个队列。当在这样的地址上接收消息时,会在所有定义的队列中均匀分布。如果多个消费者连接到单个队列,Artemis将负责他们直接的分发消息(如上所示):

    Artemis通过单地址多队列方式在集群多节点情况下,使用此方式进行集群的负载均衡。配置例子如下:

<addresses>
   <address name="address.foo">
      <anycast>
         <queue name="q1"/>
         <queue name="q2"/>
      </anycast>
   </address>
</addresses>

发布订阅消息

    在发布订阅方式中,消息会发送给订阅地址的每个消费者:

 

    配置(multicast)广播路由方式例子:

<addresses>
   <address name="pubsub.foo">
      <multicast/>
   </address>
</addresses>

    当消费者连接到广播的地址时,Artemis会自动为客户端创建订阅队列。当然也可以预先配置队列,消费者使用完全限定的队列名称直接连接到它们,但是通常不会去配置其队列:

<addresses>
   <address name="pubsub.foo">
      <multicast>
         <queue name="client123.pubsub.foo"/>
         <queue name="client456.pubsub.foo"/>
      </multicast>
   </address>
</addresses>

 

同一地址上同时使用点对点和发布-订阅

    虽然不推荐,但是可以在同一地址上定义点对点和发布-订阅。对于anycast消息只会发送到对应的anycast队列,同样的multicast消息只会发送到multicast队列。

    此方案中的行为取决于所使用协议。对应JMS,topic路由方式与队列和生成的消费者区分明显

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值