10activeMQ的网络连接

activemq如果要实现扩展性和高可用性的要求的话,就需要用到网络连接模式。

简单来说就是将多个broker实例连接,作为一个服务对外提供连接。

在这里插入图片描述

NetworkConnector

主要用来配置brokerbroker之间的通信连接,提供了两种连接方式:静态网络连接和动态网络连接

这里我使用两台broker作为示例

  • 172.18.109.177
  • 172.18.109.179

静态网络连接

修改activemq.xml增加NetworkConnector配置

<networkConnectors>
    <networkConnector uri="static://(tcp://172.18.109.177:61616,tcp://172.18.109.179:61616)"/>
</networkConnectors>

在这里插入图片描述
在这里插入图片描述
172.18.109.177发送三条消息

在这里插入图片描述
在这里插入图片描述
可以看到,在 172.18.109.177 上接收了三条消息等待消费。 172.18.109.179 上没有消息。

172.18.109.179上接收三条消息,并确认

在这里插入图片描述
在这里插入图片描述
可以看到,原来在 172.18.109.177 上的三条消息,被转移到172.18.109.179上了,并且被消费确认。现在两台broker上均没有可以消费的消息。

上面的场景是正常情况下的。如果最后一步在`172.18.109.179`上消费消息时,只消费了两条,然后该`broker`挂了或者最后一条消息想回到`172.18.109.177`上去消费确认,消息是没有办法回流过去的。

消息的丢失

一些consumer连接到broker1、消费broker2上的消息。消息先被broker1broker2消费掉,然后转发给这些consumers。假设,转发消息的时候broker1重启了,这些consumers发现brokers1连接失败,通过failover连接到broker2.但是因为有一部分没有消费的消息被broker2已经分发到broker1上去了,这些消息就好像消失了。除非有消费者重新连接到broker1上来消费。

从5.6版本开始,在destinationPolicy上新增了一个选项replayWhenNoConsumers属性,这个属性可以用来解决当broker1上有需要转发的消息但是没有消费者时,把消息回流到它原始的broker。同时把enableAudit设置为false,为了防止消息回流后被当作重复消息而不被分发

通过如下配置,在activeMQ.xml中。 分别在两台服务器都配置。即可完成消息回流处理

<policyEntry queue=">" enableAudit="false">
  <networkBridgeFilterFactory>
     <conditionalNetworkBridgeFilterFactory replayWhenNoConsumers="true" />
  </networkBridgeFilterFactory>
</policyEntry>

重启broker服务。

目前还存留的一个问题是,之后挂掉的`broker`重启之后,才能获取到丢失的消息。也就是说`NetworkConnector`是一个高性能,但不是高可用方案。

动态网络连接

随着broker数量的增多,activemq.xml里配置静态网络连接就会非常麻烦。这种情况下就可以使用动态网络连接实现broker的发现机制。通过使用multicast组播的形式实现动态网络连接,开放一个组播的IP地址各个broker向其发送消息通知其是存活的。

这种场景会消耗一定的网络资源。

容错的连接

在创建连接工厂的时候,可以通过failover来指定消费端的负载均衡,默认会连接第一个。当第一个服务挂掉之后,默认会随机进行其他可用服务的选择。达到高可用。

ConnectionFactory factory = new ActiveMQConnectionFactory(
        "failover(tcp://172.18.109.179:61616,tcp://172.18.109.177:61616)"
);

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值