如何在ActiveMQ中使用防火墙?

问题描述:

我有这个端口配置在我的3个虚拟机运行ZookeeperActiveMQ如何在ActiveMQ中使用防火墙?

[email protected]:~# ufw status verbose 
Status: active 
Logging: on (low) 
Default: deny (incoming), allow (outgoing), disabled (routed) 
New profiles: skip 

To       Action  From 
--       ------  ---- 
22       ALLOW IN Anywhere 
2881      ALLOW IN Anywhere 
2888      ALLOW IN Anywhere 
3888      ALLOW IN Anywhere 
61616      ALLOW IN Anywhere 
61617      ALLOW IN Anywhere 
22 (v6)     ALLOW IN Anywhere (v6) 
2881 (v6)     ALLOW IN Anywhere (v6) 
2888 (v6)     ALLOW IN Anywhere (v6) 
3888 (v6)     ALLOW IN Anywhere (v6) 
61616 (v6)     ALLOW IN Anywhere (v6) 
61617 (v6)     ALLOW IN Anywhere (v6) 

当我试图启动ActiveMQ,它得到随机端口使用它:

INFO | Master started: tcp://mom1.company.com:37649 
WARN | Store update waiting on 1 replica(s) to catch up to log position 0. 
WARN | Store update waiting on 1 replica(s) to catch up to log position 0. 
WARN | Store update waiting on 1 replica(s) to catch up to log position 0. 

但是,当我禁用我防火墙ActiveMQ开始正常

如何每次都使用相同的端口,以便在防火墙中创建新规则?

编辑 基于@ Daniel的建议,这是我对activemq.xml文件的配置。

<persistenceAdapter> 
    <replicatedLevelDB 
     directory="${activemq.data}/leveldb" 
     replicas="3" 
     bind="tcp://0.0.0.0:0:61616" 
     zkAddress="mom1.company.com:2881,mom2.company.com:2881,mom3.company.com:2881" 
     zkPassword="password" 
     zkPath="/activemq/leveldb-stores" 
     hostname="mom3.company" 
    /> 
</persistenceAdapter> 

... 
<transportConnectors> 
    <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --> 
    <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
    <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
    <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
    <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
    <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
    <transportConnector name="ssl" uri="ssl://0.0.0.0:61617?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
</transportConnectors> 

因为你是书面方式对动物管理员,我vaguelly rememeber从当我与主工作该日志行/从复制性LevelDB设置,我会继续前进,假设您还使用一个。如果情况确实如此,那么您在那里看到的端口是主机为客户端启动以启动复制数据的“绑定”端口。该端口可以很容易地使用在replicatedLevelDB部分中的绑定参数的经纪人XML配置来配置,例如

<broker brokerName="broker" ... > 
    ... 
    <persistenceAdapter> 
    <replicatedLevelDB 
     directory="activemq-data" 
     replicas="3" 
     bind="tcp://0.0.0.0:<myDesiredPort>" 
     zkAddress="zoo1.example.org:2181,zoo2.example.org:2181,zoo3.example.org:2181" 
     zkPassword="password" 
     zkPath="/activemq/leveldb-stores" 
     hostname="broker1.example.org" 
     /> 
    </persistenceAdapter> 
    ... 
</broker> 

然后将始终使用“myDesiredPort”为绑定端口。由于通常61619是默认端口,如果完全没有设置此参数,则可能现在已经配置了此元素,但是bind =“tcp://0.0.0.0:0”会动态地选择此元素。欲了解更多解释和复制的levelDB的可用参数的完整列表,请参阅documentation

希望这可以解决您的问题,但如果这不是您的设置,请将您的Broker配置添加到您的问题中,这将更容易找到没有猜测的实际罪魁祸首。

+0

嗨丹尼尔,谢谢你的建议。我是对的,那是我的设置,3''zookeeper'服务器使用'activemq'。我尝试了端口'61619'和'61616',但是我得到了'ERROR |线程'ActiveMQ BrokerService [localhost]任务-1错误' java.lang.IllegalArgumentException:端口超出范围:-1 \t at java.net.InetSocketAddress.checkPort(InetSocketAddress.java:143)[:1.8.0_73] '。 –

+0

感谢您用配置更新您的问题,我想我发现了这个问题。只是为了完整起见(这不应该成为问题,因为你也测试过'61619')绑定端口需要使用它自己的空闲端口,在你的配置中,绑定和openwire连接器都使用相同的,这是行不通的在内部,绑定与使用给定参数启动另一个连接器没有任何区别。但真正的问题是,你的配置太多了:0,现在你有'bind =“tcp://0.0.0.0:0:61616”'请用'bind =“tcp://尝试它0.0.0.0:61619" '。 –

+0

哦,你是对的!非常感谢你,它的工作! –