zoukankan      html  css  js  c++  java
  • ActiveMQ-Network of brokers集群模式

    概述

    在ActiveMQ运行过程中,如果发生某个queue只有生产者没有消费者的情况时,消息就会产生积压。Network of brokers模式通过将积压的消息转发给处于同一network的其它broker的方式很好地解决了这个问题,但这个模式也有问题。

    基本配置

    vim conf/activemq.xml
    <broker>
    ....
           <networkConnectors>
                    <networkConnector uri="static:(tcp://localhost:20001,tcp://localhost:20010,tcp://172.16.1.14:20001,tcp://172.16.1.14:20002,tcp://172.16.1.14:20003,tcp://172.16.1.14:20004)"/>
            </networkConnectors>
            <persistenceAdapter>
                <kahaDB directory="${activemq.data}/kahadb"/>
    ....
    </broker> 

    注:

    1、<networkConnector uri="static:(....)">,括号中的实例要包括自己。可以理解为这些实例组成了一个网络,相互可以进行消息接收,但是只有做了这项配置的broker才能够将消息转发给网络中的其它broker。

    2、activemq create /path/<broker_name>,注意network中的broker_name不能相同,相同则只有一个被本地broker当作消费者。

    控制台展示

    注:

    1、标1的是真实消费者,一般由应用程序产生,标2的是网络中的其它broker,本地broker将消息转发给它们。

    2、可以看出,本地broker将network中的其它broker和APPConsumer都当做是自己的消费者,平均分发消息。

    3、本人猜想,这种模式实际上会增加broker的I/O消耗,因为同一条消息被接收和发送了两次。

    4、broker通常用于异步通信,消息的即时性没那么强,实际生产中即使消费者宕了,我们只需通知让租户重启消费者即可,不必急于将消息分发出去。

    5、这种模式并不会起到负载均衡的作用,因为发送给其它broker也消耗网络IO,反而加重了负载。通常直接在客户端侧做负载均衡更加方便。

    6、network of brokers模式默认是单向的,即开通该功能的broker不会再接收消息,这意味着只有部分broker能够开启这个功能,而且会加重剩余broker的负载。

    7、当集群规模较大时,这种方式还会使得生产者和消费者关系紊乱,不利于追踪消息的走向。对于消息中间件的部署,个人以为,简单即正义。

    8、总之,对于异步通信而言,我们通常允许消息积压,但不允许消息丢失,而网络又是不可靠的,所以一般不用这种模式。

  • 相关阅读:
    程序的循环结构
    异常处理
    java中多态的使用
    java中String类型的相关知识
    java中类与对象
    java中部分知识点的验证实现
    java 中递归的实现 以及利用递归方法实现汉诺塔
    java 枚举类型和数据二进制等问题思考
    简单的java程序通过对话框输出 计算加减乘除运算(运算方法可选择)
    大道至简第二章读后感
  • 原文地址:https://www.cnblogs.com/Peter2014/p/8000383.html
Copyright © 2011-2022 走看看